Composite组合模式

>>返回《C#常用设计模式》

  • 1. 简介
  • 2. 示例
  • 3. 适用环境

1. 简介

  • 定义

    • 组合多个对象形成树形结构以表示具有部分-整体关系的层次结构。
    • 组合模式让调用程序可以统一对待单个对象和组合对象
  • 案例
    • 例如文件系统的文件夹和文件结构就是此模式
    • winform中,空间的基类是Control类型,子类有的是单一类型(Textbox),有的是容器类型(Panel),Add和Remove方法使用暴露Collections的方式,都有方法(eachChild)

2. 示例

namespace WindowsFormsApplication1
{
    //抽象的部件类描述将来所有部件共有的行为
    public abstract class Component
    {
        protected string name;
        public string Name
        {
            get
            {
                return name;
            }
            set
            {
                name = value;
            }
        }
        //添加部件
        public abstract void Add(Component component);
        //删除部件
        public abstract void Remove(Component component);
        //遍历所有子部件
        public abstract void eachChild();
    }

    //组合部件类
    public class Leaf : Component
    {
        //叶子节点不具备添加的能力,所以不实现
        public override void Add(Component component)
        {
            throw new NotImplementedException();
        }

        //叶子节点不具备添加的能力必然也不能删除
        public override void Remove(Component component)
        {
            throw new NotImplementedException();
        }

        //叶子节点没有子节点所以显示自己的执行结果
        public override void eachChild()
        {
            Console.WriteLine("{0}执行了..", name);
        }
    }

    //组合类
    public class Composite : Component
    {
        //用来保存组合的部件
        List<Component> myList = new List<Component>();

        //添加节点 添加部件
        public override void Add(Component component)
        {
            myList.Add(component);
        }

        //删除节点 删除部件
        public override void Remove(Component component)
        {
            myList.Remove(component);
        }

        //遍历子节点
        public override void eachChild()
        {
            Console.WriteLine("{0}执行了..", name);
            foreach (Component c in myList)
            {
                c.eachChild();
            }
        }
    }
    class Client
    {
        static void Main(string[] args)
        {
            //构造根节点
            Composite rootComponent = new Composite();
            rootComponent.Name = "根节点";

            //添加两个叶子几点,也就是子部件
            Leaf l = new Leaf();
            l.Name = "叶子节点一";
            Leaf l1 = new Leaf();
            l1.Name = "叶子节点二";

            rootComponent.Add(l);
            rootComponent.Add(l1);

            //遍历组合部件
            rootComponent.eachChild();
        }
    }
}

3. 适用环境

  • 在具有整体和部分层次的结构中,希望通过一种方式忽略整体与部分的差异一致的对待它们
  • 在一个使用面向对象语言开发的系统中要处理一个树形结构
  • 在一个系统总能够分离出叶子容器对象,而且它们的类型不固定,需要增加一些新的类型
(0)

相关推荐

  • 13、组合模式

    组合模式 文章目录 组合模式 概述 结构 结构实现 练习 源代码 透明组合模式与安全组合模式 透明组合模式 安全组合模式 组合模式优/缺点与适用环境 优点 缺点 适用环境 概述 组合模式:组合多个对象 ...

  • C#设计模式-组合模式(Composite Pattern)

    概念 组合是一种结构型设计模式, 你可以使用它将对象组合成树状结构, 并且能像使用独立对象一样使用它们. 组合模式(Composite Pattern)是将对象组合成树形结构以表示'部分-整体'的层次 ...

  • 设计模式(十)——组合模式(HashMap源码解析)

    设计模式(十)——组合模式(HashMap源码解析)

  • Matlab组合模式

    组合模式(Composite),将对象组合成树形结构以表示"部分-整体"的层次结构,组合模式使得用户对单个对象和组合对象的使用具有一致性.组合模式的目的是让客户端不再区分操作的是组 ...

  • 结构型设计模式 - 组合模式详解

    基本介绍 1.组合模式(Composite Pattern)又叫部分整体模式,他创建了对象组的树形结构,将对象组合成树状结构以表示「整体 - 部分」的层次关系. 2.组合模式使得用户对单个对象和组合对 ...

  • PHP设计模式之组合模式

    PHP设计模式之组合模式 互联网公司流行扁平化管理,也就是管理层级尽量少于或者不超过三层,作为一个底层的码农,你的CEO和你的职级也就相差3层以内.但是很多传统企业,则会有非常深的层级关系,从数据结构 ...

  • 结构型模式:组合模式

    文章首发: 结构型模式:组合模式 七大结构型模式之三:组合模式. 简介 姓名 :组合模式 英文名 :Composite Pattern 价值观 :专门解决各种树形疑难杂症 个人介绍 : Compose ...

  • 【3/25】使用组合模式(Composite Pattern)实现布局容器

    这是<小游戏从0到1设计模式重构>系列内容第3篇,所有源码及资料在"程序员LIYI"公号回复"小游戏从0到1"获取. 组合模式(Composite) ...

  • 打板模型图解:涨停双响炮的三种K线组合模式

    我们知道股市中大幅连续大阳线拉升的股票很少见,更多的还是大阳线后会接连几天出现调整,实战中我们往往不敢在其调整时贸然下手,股市中谨慎永远没有错,这种态度无可厚非,谁也不知道这到底是调整还是庄家在出货, ...

  • [PHP小课堂]PHP设计模式之组合模式

    [PHP小课堂]PHP设计模式之组合模式 关注公众号:[硬核项目经理]获取最新文章 添加微信/QQ好友:[DarkMatterZyCoder/149844827]免费得PHP.项目管理学习资料

  • 【随队记者专栏】“巴特勒+伊戈达拉”:热火在新赛季再次冲冠的组合模式

    上个周末是关于自由球员的.下周将是训练营的开启之时.这就是休赛期的旋风. 不可能有多少喘息的时间,只是第二次风力加速. 那么,迈阿密热火如何才能从30支球队中脱颖而出呢? 三个想法: --它(趋势)正 ...

  • 邮政新一代寄递平台“月份组合”模式的投递排班表查询方法

    近期,遇有一基层投递部反馈:一名投递员病假,需修订排班表,但新一代寄递平台查不到已维护完毕的排班表?咨询如何解决. 经小编了解,上述问题解决实际非常简单.该投递班组遇到问题为"月份组合&qu ...

  • 八字五行十神的动态组合模式

    命理学所依据的原理是中国的易学.作为代表世界文明发展的群经之首--<易经>,最核心的原则是天地人之间的平衡.但其依存关系处于变化中,在变动中不断形成新的平衡. 这些由五行十神之间的生克而形 ...