Ứng dụng Design Pattern trong thực tế



ỨNG DỤNG DESIGN PATTERN

I. Sơ lược
Ứng dụng của design pattern trong thực tế phân tích thiết kế phần mềm hướng đối tượng là rất lớn. Hầu như cứ  ở  đâu có phần mềm hướng  đối tượng thì  ở  đó có design pattern. Design pattern được vận dụng linh hoạt và dưới nhiều hình thức khác nhau. Sau đây là một vài ứng dụng điển hình của Design pattern.

II. Framework
Framework là một tập các lớp được đóng gói để có thể dùng lại cho các ứng dụng cụ thể. Ứng dụng cụ thể sẽ tùy chỉnh lại các lớp này như kế thừa, dẫn xuất để tạo ra các lớp mới phục vụ cho mục đích của ứng dụng. Framework phải có được những đặc điểm là : nhỏ gọn, đầy đủ, dễ customize, tính khái quát cao,... Tập các lớp trong framework được cài đặt và thiết lập các mối quan hệ theo các mẫu design pattern.

III. Kiến trúc Add – Ins
Đây là một mô hình ứng dụng cho phép tạo ra một giao diện ghép nối các môđun ứng dụng một cách dễ dàng. Ứng dụng gồm có nhân ứng dụng (core) và các môđun ghép nối là các gói DLL. Cấu hình của ứng dụng được lưu vào các file định dạng XML.

Để tạo một ứng dụng plugin đơn giản, ta cần:
1. Một project dạng Class Library để chứa interface IPlugin,bao gồm các hàm để các lớp con plugin sẽ định nghĩa. Các project còn lại sẽ Add Reference project này để sử dụng interface IPlugin

    public interface IPlugin
    {
        string getName();
        string xuLyChuoi(string source);
    }

2. Một hay nhiều project dạng Class Library để chứa các lớp plugin con kế thừa từ IPlugin.

    public class Plugin1 : IPlugin
    {
        public string getName()
        {
            return "Plugin 1";
        }

        public string xuLyChuoi(string source)
        {
            return source.ToUpper();
        }
    }

    public class Plugin2 : IPlugin
    {
        public string getName()
        {
            return "Plugin 2";
        }

        public string xuLyChuoi(string source)
        {
            return source.ToLower();
        }
    }

3. Một project sử dụng các plugin, lưu ý là phải chép các file dll của các plugin1 và plugin2 vào cùng một thư mục nào đó để có thể load lên.

    public partial class Form1 : Form
        {
        private List<IPlugin> ipi = new List<IPlugin>();

        public Form1()
        {
            InitializeComponent();
        }

        private void Form1_Load(object sender, EventArgs e)
        {                    
            string pluginDir = Application.StartupPath + "\\Plugin";

            foreach (String fileName in Directory.GetFiles(pluginDir, "*.dll"))
            {
                Type[] pluginTypes = Assembly.LoadFile(fileName).GetTypes();

                foreach (Type type in pluginTypes)
                {
                    if (type.ToString().Contains("Plugin"))
                    {
                        IPlugin plugin = Activator.CreateInstance(type) as IPlugin;
                        ipi.Add(plugin);
                        comboBox1.Items.Add(plugin.getName());
                        break;
                    }
                }
            }
        }

        private void button1_Click(object sender, EventArgs e)
        {
            if (comboBox1.Text != "")
            {
                for (int i = 0; i < ipi.Count; i++)
                {
                    if (comboBox1.Text == ipi[i].getName())
                    {
                        dest.Text = ipi[i].xuLyChuoi(source.Text);
                    }
                }
            }
        }
        }



Nguồn : Sưu tầm và chỉnh sửa

Nhận xét

Bài đăng phổ biến từ blog này

Property trong Objective-C

Quản lý bộ nhớ trong Objective-C

Optional trong Swift