合成模式(Composite)
模式定义
合成(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)相关推荐
- 合成模式(Composite Pattern)
http://www.cnblogs.com/singlepine/archive/2005/10/30/265001.html 一. 合成(Composite)模式 合成模式有时又叫做部分-整体模式 ...
- 合成模式 :Composite(转自阿良.NET)
合成(Composite)模式 合成模式有时又叫做部分-整体模式(Part-Whole).合成模式将对象组织到树结构中,可以用来描述整体与部分的关系.合成模式可以使客户端将单纯元素与复合元素同等看待 ...
- java 类的合成_Java设计模式-合成模式
合成模式有时也叫组合模式,对象组合成树形结构以表示"部分-整体"的层次结构,组合模式使得用户对单个对象和组合对象的使用具有一致性.掌握组合模式的重点是要理解清楚 "部分/ ...
- java设计模式---合成模式2
合成模式属于对象的结构模式,有时又叫做"部分--整体"模式.合成模式将对象组织到树结构中,可以用来描述整体与部分的关系.合成模式可以使客户端将单纯元素与复合元素同等看待. 合成模式 ...
- 《JAVA与模式》之合成模式
在阎宏博士的<JAVA与模式>一书中开头是这样描述合成(Composite)模式的: 合成模式属于对象的结构模式,有时又叫做"部分--整体"模式.合成模式将对象组织到树 ...
- php 23种设计模型 - 组合模式(合成模式)
组合模式(Composite) 组合模式(Composite Pattern),又叫部分整体模式,是用于把一组相似的对象当作一个单一的对象.组合模式依据树形结构来组合对象,用来表示部分以及整体层次.这 ...
- java设计模式组合模式详解_《JAVA设计模式》之组合模式(Composite)
在阎宏博士的<JAVA与模式>一书中开头是这样描述合成(Composite)模式的:html 合成模式属于对象的结构模式,有时又叫作"部分--总体"模式.合成模式将对象 ...
- 结构型 组合模式 Composite
Composite,组合模式:将对象组合成树形结构以表示部分整体的关系,Composite使得用户对单个对象和组合对象的使 用具有一致性. Mary今天过生日."我过生日,你要送我一件礼物. ...
- Java设计模式 —— 组合模式(Composite)
Java设计模式 -- 组合模式(Composite) 定义 Composite,组合模式:将对象组合成树形结构以表示部分整体的关系,Composite使得用户对单个对象和组合对象的使用具有一致性. ...
最新文章
- [导入]C#中实现Socket端口复用
- python查看目录下的文件_Python——查看目录下所有的目录和文件
- 当你打开的程序在任务栏出现两个一样的怎么办?
- CentOs 6.0 下安装cacti的syslog插件
- mysql5.6 replication_MySQL5.6 Replication主从复制(读写分离) 配置完整版
- Java内存之栈与堆
- 大牛是怎么思考设计MySQL优化方案
- iOS开发:通过经纬度获得城市、省份等信息
- 国外计算机专业入门语言,【转自知乎】给想要报考计算机专业学生的一些建议...
- Træfɪk入门教程
- [No0000143]Win10“卓越性能模式”
- Linux虚拟文件系统小结
- vue实现大转盘抽奖
- 会员积分系统的四大元素
- 点云配准(一) 线性代数基础
- After Effects 自动导入素材和分类的脚本
- python程序的循环结构_四、python程序结构之循环结构
- 电子元器件行业SRM供应商系统加强产业链协同,保证零差错高效率
- uCOS-II 基础入门教程(九)
- kubelet垃圾回收配置