模式定义

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

UML类图

  • 抽象构件(component): 为参加组合的对象定义出公共的接口及其默认的行为,用来管理所有的子对象。负责对整体操作的方法有:Operation() Add(Component) Remove(Component) GetChild(int)
  • 树枝构件(Composite): 抽象构建子类,并包含抽象构建类型的集合(存放下级对象)。参加组合的有下级子对象的对象,除拥有Operation()外,还包括整体操作方法:Add(Component) Remove(Component) GetChild(int)
  • 树叶构件(Left): 抽象构建子类,没有下级子对象的对象,拥有Operation()即可

    代码结构

    public static class CompositeApp{public static void Run(){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);root.Add(new Leaf("Leaf C"));root.Display(1);Console.ReadKey();}}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 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 Display(int depth){Console.WriteLine(new string('-', depth) + name);foreach (Component component in _children){component.Display(depth + 2);}}public override void Remove(Component c){_children.Remove(c);}}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);}}

情景案例

这里以画一副画为例,一幅画有好多元素组成,每种元素都有展示方法Display(int indent);。但有的是独立的元素(树叶节点),有的是组合元素(树枝节点)。
其实Asp.Net WebForm 中的Control就是组合机构,有个控件可以包含其它控件

public static class MainApp{public static void Run(){CompositeElement root = new CompositeElement("Picture");root.Add(new PrimitiveElement("Red Line"));root.Add(new PrimitiveElement("Blue Circle"));root.Add(new PrimitiveElement("Green Box"));CompositeElement comp = new CompositeElement("Two Circles");comp.Add(new PrimitiveElement("Black Circle"));comp.Add(new PrimitiveElement("White Circle"));root.Add(comp);PrimitiveElement pe = new PrimitiveElement("Yellow Line");root.Add(pe);root.Remove(pe);root.Display(1);Console.ReadKey();}}/// <summary>/// 画元素/// </summary>abstract class DrawingElement{protected string _name;public DrawingElement(string name){this._name = name;}public abstract void Add(DrawingElement d);public abstract void Remove(DrawingElement d);public abstract void Display(int indent);}/// <summary>/// 单独元素/// </summary>class PrimitiveElement : DrawingElement{public PrimitiveElement(string name): base(name){}public override void Add(DrawingElement c){Console.WriteLine("Cannot add to a PrimitiveElement");}public override void Remove(DrawingElement c){Console.WriteLine( "Cannot remove from a PrimitiveElement");}public override void Display(int indent){Console.WriteLine(new String('-', indent) + " " + _name);}}/// <summary>/// 组合元素/// </summary>class CompositeElement : DrawingElement{private List<DrawingElement> elements = new List<DrawingElement>();public CompositeElement(string name) : base(name){}public override void Add(DrawingElement d){elements.Add(d);}public override void Remove(DrawingElement d){elements.Remove(d);}public override void Display(int indent){Console.WriteLine(new String('-', indent) + "+ " + _name);foreach (DrawingElement d in elements){d.Display(indent + 2);}}}

转载于:https://www.cnblogs.com/LoveTomato/p/8400928.html

合成模式(Composite)相关推荐

  1. 合成模式(Composite Pattern)

    http://www.cnblogs.com/singlepine/archive/2005/10/30/265001.html 一. 合成(Composite)模式 合成模式有时又叫做部分-整体模式 ...

  2. 合成模式 :Composite(转自阿良.NET)

     合成(Composite)模式 合成模式有时又叫做部分-整体模式(Part-Whole).合成模式将对象组织到树结构中,可以用来描述整体与部分的关系.合成模式可以使客户端将单纯元素与复合元素同等看待 ...

  3. java 类的合成_Java设计模式-合成模式

    合成模式有时也叫组合模式,对象组合成树形结构以表示"部分-整体"的层次结构,组合模式使得用户对单个对象和组合对象的使用具有一致性.掌握组合模式的重点是要理解清楚 "部分/ ...

  4. java设计模式---合成模式2

    合成模式属于对象的结构模式,有时又叫做"部分--整体"模式.合成模式将对象组织到树结构中,可以用来描述整体与部分的关系.合成模式可以使客户端将单纯元素与复合元素同等看待. 合成模式 ...

  5. 《JAVA与模式》之合成模式

    在阎宏博士的<JAVA与模式>一书中开头是这样描述合成(Composite)模式的: 合成模式属于对象的结构模式,有时又叫做"部分--整体"模式.合成模式将对象组织到树 ...

  6. php 23种设计模型 - 组合模式(合成模式)

    组合模式(Composite) 组合模式(Composite Pattern),又叫部分整体模式,是用于把一组相似的对象当作一个单一的对象.组合模式依据树形结构来组合对象,用来表示部分以及整体层次.这 ...

  7. java设计模式组合模式详解_《JAVA设计模式》之组合模式(Composite)

    在阎宏博士的<JAVA与模式>一书中开头是这样描述合成(Composite)模式的:html 合成模式属于对象的结构模式,有时又叫作"部分--总体"模式.合成模式将对象 ...

  8. 结构型 组合模式 Composite

    Composite,组合模式:将对象组合成树形结构以表示部分整体的关系,Composite使得用户对单个对象和组合对象的使 用具有一致性. Mary今天过生日."我过生日,你要送我一件礼物. ...

  9. Java设计模式 —— 组合模式(Composite)

    Java设计模式 -- 组合模式(Composite) 定义 Composite,组合模式:将对象组合成树形结构以表示部分整体的关系,Composite使得用户对单个对象和组合对象的使用具有一致性. ...

最新文章

  1. [导入]C#中实现Socket端口复用
  2. python查看目录下的文件_Python——查看目录下所有的目录和文件
  3. 当你打开的程序在任务栏出现两个一样的怎么办?
  4. CentOs 6.0 下安装cacti的syslog插件
  5. mysql5.6 replication_MySQL5.6 Replication主从复制(读写分离) 配置完整版
  6. Java内存之栈与堆
  7. 大牛是怎么思考设计MySQL优化方案
  8. iOS开发:通过经纬度获得城市、省份等信息
  9. 国外计算机专业入门语言,【转自知乎】给想要报考计算机专业学生的一些建议...
  10. Træfɪk入门教程
  11. [No0000143]Win10“卓越性能模式”
  12. Linux虚拟文件系统小结
  13. vue实现大转盘抽奖
  14. 会员积分系统的四大元素
  15. 点云配准(一) 线性代数基础
  16. After Effects 自动导入素材和分类的脚本
  17. python程序的循环结构_四、python程序结构之循环结构
  18. 电子元器件行业SRM供应商系统加强产业链协同,保证零差错高效率
  19. uCOS-II 基础入门教程(九)
  20. kubelet垃圾回收配置

热门文章

  1. C# 字符串 数据类型 判断 与特定规则验证
  2. urllib post请求 cookie
  3. C#操作mysql中临时表不自动删除
  4. Java开发SVM之Eclipse集成LibSVM示例
  5. pytorch安装实录(win10+cuda8+pycharm+anaconda)
  6. php定义枚举,PHP中Enum(枚举)用法实例详解
  7. sqlserver 安装_安装sqlserver
  8. JVM盘点家底查看初始默认值
  9. Java的知识点25——IO、 数据源
  10. coreldraw 双层边框