zoukankan      html  css  js  c++  java
  • 组合模式

       单一职责原则

        定义:不要存在多于一个导致类变更的原因。通俗的说,即一个类只负责一项职责。 

       里氏替换原则

        定义:所有引用基类的地方必须能透明地使用其子类的对象。

       依赖倒置原则

        定义:高层模块不应该依赖低层模块,二者都应该依赖其抽象;抽象不应该依赖细节;细节应该依赖抽象。

       接口隔离原则

        定义:客户端不应该依赖它不需要的接口;一个类对另一个类的依赖应该建立在最小的接口上。 

       迪米特法则

        定义:一个对象应该对其他对象保持最少的了解。

       开闭原则

        定义:一个软件实体如类、模块和函数应该对扩展开放,对修改关闭。

      

      我们首先来看一下组合模式的定义: 将对象组合成树形结构以表示'部分-整体'的层次结构.组合模式使得用户对单个对象和组合对象的使用具有一致性

        也就是说需要为单个和组合对象提供统一的接口来访问

          那么一个实际的问题来源是什么?

         就像文本编辑一样,你可以一个一个的改变字的颜色,粗细,字体,也可以一段一段的修改,也就是部分和整体一样的情况

          那下面我们就来看一个例子:

        我们就来实现如上面这个例子:

          当然这个模式主要用的也是运行时的多态,具体思路如下:

            由于,局部和整体的操作一直,所有就可以抽象出一个夫类,夫类里面有他们一致的方法

        abstract class root
        {
            protected root rot=null;
            protected virtual string name { get; set; }
           public abstract void add(root t);
           public abstract void show(int depth);//depth深度
            public root(string name)
           {
               this.name = name;
           }
        }

      然后就是"树根"了

        class shucha:root//树杈
        {
           private List<root> Troot = new List<root>();
            public shucha(string name) : base(name) { }
            public override void add(root t)
            {
                Troot.Add(t);
            }
            public override void show(int depth)
            {
                Console.WriteLine(new string('-', depth) + this.name);
                foreach (root item in Troot)
                {
                    item.show(depth+2);
                }
            }
        }

      然后就是"树叶"了

        class shuyei:root//树叶
        {
            public shuyei(string name) : base(name) { }
            public override void add(root t){}
            public override void show(int depth)
            {
                Console.WriteLine(new string('-',depth)+this.name);
            }
        }

      然后就可以执行了

            static void Main(string[] args)
            {
                shucha s = new shucha("主树根");
                s.add(new shuyei("我是树叶一"));
                s.add(new shuyei("我是树叶二"));
                shucha s1 = new shucha("我是次树根");
                s.add(s1);
                s1.add(new shuyei("我是树叶三"));
                s1.add(new shuyei("我是树叶四"));
                s.show(1);
                Console.Read();
            }
        }

     

    Hold on, everything is possible.
  • 相关阅读:
    Python学习——网站收集
    基于三轴加速计的运动识别与控制系统
    Unity小记
    Unity3d 札记-Survival Shooting 知识点汇总--受到伤害时屏幕闪血光如何做到
    Unity3d 札记-Survival Shooting 知识点汇总--Navigation 自动寻路的运用
    Unity3d 札记-Survival Shooting 知识点汇总--AnimationController
    Unity3d札记 --TanksTutorial收获与总结
    Unity3d 札记-Tanks Tutorial 知识点汇总--游戏流程的控制
    Unity3d 札记-Tanks Tutorial 知识点汇总---如何发射子弹
    Unity3d 札记-Tanks Tutorial 知识点汇总---子弹爆炸效果的实现
  • 原文地址:https://www.cnblogs.com/student-note/p/6123456.html
Copyright © 2011-2022 走看看