• 组合(Composite)模式 *


    组合(Composite)模式:将对象组合树形结构以表示‘部分-整体’的层次结构。

     组合模式使得用户对单个对象和组合对象具有一致性 

    /*
    * 抽象构件(Component)角色:这是一个抽象角色,它给参与组合的对象规定一个接口。这个角色给出共有接口及其默认行为。
    * 树叶构件(Leaf)角色:代表参加组合的树叶对象。一个树叶对象没有下级子对象。
    * 树枝构件(Composite)角色:代表参加组合的有子对象的对象,并给出树枝构件对象的行为。
    */

    基础代码:

         // 创建一个树结构
                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"));
                root.Add(comp);
                Composite compss = new Composite("Composite Y");
                compss.Add(new Leaf("Leaf XXB"));
                comp.Add(compss);
                root.Add(new Leaf("Leaf C"));
                // 添加和删除叶子
                Leaf l = new Leaf("Leaf D");
                root.Add(l);
                root.Remove(l);
    
                // 递归地显示节点
                root.Display(1);
    
                Console.WriteLine("
     ============ 
    ");
    
    
        /// <summary>
        /// 抽象构件(Component)角色
        /// </summary>
        public abstract class Component
        {
            protected string name; 
            // 构造函数
            public Component(string name)
            {
                this.name = name;
            }
            // 操作
            public abstract void Display(int depth);
        }
    
        //  树枝构件(Composite)角色
        public class Composite : Component
        { 
            private ArrayList children = new ArrayList(); 
            //构造函数
            public Composite(string name) : base(name) { } 
    
            //方法
            public void Add(Component component)
            {
                children.Add(component);
            }
            public void Remove(Component component)
            {
                children.Remove(component);
            } 
            
            public override void Display(int depth)
            {
                Console.WriteLine(new String('-', depth) + name); 
                // 显示每个节点的孩子
                foreach (Component component in children)
                    component.Display(depth + 3);
            }  
        }
        /// <summary>
        /// 树叶构件(Leaf)角色
        /// </summary>
        public class Leaf : Component
        {
            // 构造函数
            public Leaf(string name) : base(name) { } 
            // 从写函数
            public override void Display(int depth)
            {
                Console.WriteLine(new String('-', depth) + name);
            }
        }
  • 相关阅读:
    软件设计师考试知识点总结
    HTML和CSS
    JavaScript核心知识点
    操作系统--页面置换算法(缺页数计算)
    中标麒麟系统远程桌面连接
    数据结构 图
    数据结构 二叉树
    MATLAB 大数据剔除坏值
    PTA 邻接表存储图的广度优先遍历(20 分)
    PTA 邻接矩阵存储图的深度优先遍历
  • 原文地址:https://www.cnblogs.com/dragon-L/p/3790611.html
Copyright © 2020-2023  润新知