Princípios de design orientado a objetos C # (1) princípios de abertura e fechamento

1. Definição do princípio de abertura e fechamento:

1. A entidade de software deve ser aberta para extensão e fechada para modificação.
2. Quando os requisitos do aplicativo mudam, a função do módulo pode ser estendida para atender aos novos requisitos sem modificar o código-fonte e o código binário da entidade de software.
3. Entidades de software incluem: módulos, classes e interfaces, métodos divididos no projeto

2. O papel do princípio de abertura e fechamento:

1. Pode melhorar a capacidade de reutilização do código
2. Pode melhorar a capacidade de manutenção do software

3. Realização do princípio de abertura e fechamento:

1. O princípio de abertura e fechamento pode ser realizado por meio de "restrições abstratas e alterações de encapsulamento", ou seja, uma camada de abstração relativamente estável é definida para software por meio de interfaces ou classes abstratas, e os fatores variáveis ​​são encapsulados na mesma classe de realização concreta.
2. Por causa da abstração Boa flexibilidade e ampla adaptabilidade. Contanto que a abstração seja razoável, a estabilidade da arquitetura do software pode ser basicamente mantida, e os detalhes mutáveis no software podem ser estendidos a partir das classes de implementação derivadas da abstração. Quando o modo do software muda, ele só precisa ser reconstruído de acordo com as necessidades. Basta derivar uma classe de implementação


Insira a descrição da imagem aqui
Insira a descrição da imagem aqui
Insira a descrição da imagem aqui

  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);
            
        }

Princípio de abertura e fechamento do plug-in do notebook

Acho que você gosta

Origin blog.csdn.net/MrLsss/article/details/109230502
Recomendado
Clasificación