• 组合模式


    Composite,将对象组合成树形结构以表示”部分——整体“的层次结构。组合模式使得用户对单个对象和组合对象的使用具有一致性。

    就是套娃,一层套一层。

        abstract class Component
        {
            protected string name;
            public Component(string name)
            {
                this.name = name;
            }
            public abstract void Add(Component c);
            public abstract void Remove(Component c);
            public abstract void Display(int depth);
        }
        class Leaf:Component
        {
            public Leaf(string name) : base(name) { }
    
            public override void Add(Component c)
            {
                Console.WriteLine("Cannot add to a leaf");
            }
    
            public override void Remove(Component c)
            {
                Console.WriteLine("Cannot remove from a leaf");
            }
    
            public override void Display(int depth)
            {
                Console.WriteLine(new string('-',depth)+name);
            }
        }
        class Composite : Component
        {
            private List<Component> children = new List<Component>();
            public Composite(string name) : base(name) { }
            public override void Add(Component c)
            {
                children.Add(c);
            }
            public override void Remove(Component c)
            {
                children.Remove(c);
            }
    
            public override void Display(int depth)
            {
                Console.WriteLine(new string('-',depth)+name);
                //通过循环遍历将所有的子节点都输出
                foreach (Component component in children)
                {
                    component.Display(depth + 2);
                }
            }
        }

    调用样例:

            static void Main(string[] args)
            {
                Composite root = new Composite("root");
                root.Add(new Leaf("Leaf A"));
                root.Add(new Leaf("Leaf B"));
    
                Composite comp = new Composite("Composite X");
                comp.Add(new Leaf("Leaf XA"));
                comp.Add(new Leaf("Leaf XB"));
    
                //这里就将 Composite 分配到root下了,套了第一层
                root.Add(comp);
    
                Composite comp2 = new Composite("Composite XY");
                comp2.Add(new Leaf("Leaf XYA"));
                comp2.Add(new Leaf("Leaf XYB"));
    
                //这里套了第二层
                comp.Add(comp2);
                root.Display(2);
    
                comp.Remove(comp2);
                root.Display(2);
    
                Console.ReadLine();
            }
  • 相关阅读:
    71 是否同一棵二叉搜索树(25 分)
    75 平衡二叉树的根(25 分)
    72 树种统计(25 分)
    2018(容斥定理 HDU6286)
    直观的理解计算机中的数值编码
    如何关闭emacs开启时自己打开的欢迎界面
    图论:最短路径:广度优先搜索(C语言实现)
    ubunut 14.04 将Caps Lock设置为Control
    邻接表:C语言实现
    队列(C语言实现)
  • 原文地址:https://www.cnblogs.com/xunzf0402/p/16528012.html
Copyright © 2020-2023  润新知