C#面向对象设计原则(一)开闭原则

一、开闭原则的定义:

1.软件实体应当对扩展开放、对修改关闭。
2.当应用的需求发生改变时,在不修改软件实体的源代码和二进制代码的前提下,可以扩展模块的功能,使其满足新的需求。
3.软件实体包含:项目中划分的模块,类与接口、方法

二、开闭原则的作用:

1.可以提高代码的复用性
2.可以提高软件的可维护性

三、开闭原则的实现:

1.可以通过“抽象约束、封装变化”来实现开闭原则、即通过接口或者抽象类为软件定义一个相对稳定的抽象层,而将可变因素封装在相同的具体实现类中
2.因为抽象灵活性好,适应性广,只要抽象的合理,可以基本保持软件架构的稳定,而软件中易变的细节可以从抽象派生来的实现类进行扩展,当软件方式变化时,只需要根据需求重新派生一个实现类就好了


在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

  Type typeInterface;

        private ArrayList plugins = new ArrayList();//存放插件
        int counts = 0;

        private void Form1_Load(object sender, EventArgs e)
        {
    
    
            InterfaceByNote editor;
            this.FormBorderStyle = FormBorderStyle.FixedDialog;//固定窗体
            #region 03
            //先获取程序集目录路径
            string path = Path.Combine(Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location), "Addons");
            string[] interpath = Directory.GetFiles(path, "*.dll");
            for (int i = 0; i < interpath.Length; i++)//循环每个dll文件
            {
    
    
                Assembly asm = Assembly.LoadFile(interpath[i]);
                //获取程序集里的所有公共类
                Type[] types=asm.GetExportedTypes();
                typeInterface = typeof(InterfaceByNote);//获取接口的type
                for (int r = 0; r < types.Length; r++)
                {
    
    
                    //循环遍历每个类,判断当前类是否实现了接口
                    if (typeInterface.IsAssignableFrom(types[r])&&!types[r].IsAbstract)
                    {
    
    
                        editor = (InterfaceByNote)Activator.CreateInstance(types[r]);//创建对象并保存到接口类型集合
                        ToolStripItem T=this.编辑EToolStripMenuItem.DropDownItems.Add(editor.Name.ToString());
                        plugins.Add(editor);
                        T.Tag = counts;
                        counts++;
                        T.Click += T_Click1;
                    }
                }
            }
            #endregion
        }
        private void T_Click1(object sender, EventArgs e)
        {
    
    
            ToolStripItem s=sender as ToolStripItem;
            InterfaceByNote st=(InterfaceByNote)plugins[Convert.ToInt32(s.Tag)];
            st.Run(this.textBox1);
            
        }

笔记本插件式开发 -开闭原则

猜你喜欢

转载自blog.csdn.net/MrLsss/article/details/109230502