合成模式(Composite Pattern)
2006-10-08 21:58
162 查看
合成模式让客户程序反单个基本对象和这种对象的对象组(合成)用一种统一的方式进行处理。
![](http://p.blog.csdn.net/images/p_blog_csdn_net/peacefulsword/CompositePattern2006100801.jpg)
如图所示,单个的对象:Leaf和合成对象:Composite都提供了Operation()方法来提供相同的操作。其相同的操作往往使用递归来进行处理。
在实现中,合成会产生二种结构,一种是树形的结构,另一种是环形的结构。由于环形结构存在无限递归的情况,所以在实现时要设法防止对同一对象进行二次操作。
合成模式又存在二种实现的方式,一种是透明式合成模式,另一种是安全式合成模式。
透明式合成模式是在接口IComponent中定义Composite类中所需要的对子对象的操作。这样Leaf和Composite类对外就呈现了一样的接口。但是这些对子对象进行操作的方法对Leaf类没有意义。调用Leaf类的这些方法时反而容易出现运行时错误。
安全式合成模式是在Composite类中定义对子对象的操作,而在接口中并不声明。这样的好处是不会对Leaf类的对象调用对子对象的操作。但这样对外提供的接口就不完全一致了。如上图所示的即为安全式合成模式。
![](http://p.blog.csdn.net/images/p_blog_csdn_net/peacefulsword/CompositePattern2006100801.jpg)
如图所示,单个的对象:Leaf和合成对象:Composite都提供了Operation()方法来提供相同的操作。其相同的操作往往使用递归来进行处理。
在实现中,合成会产生二种结构,一种是树形的结构,另一种是环形的结构。由于环形结构存在无限递归的情况,所以在实现时要设法防止对同一对象进行二次操作。
合成模式又存在二种实现的方式,一种是透明式合成模式,另一种是安全式合成模式。
透明式合成模式是在接口IComponent中定义Composite类中所需要的对子对象的操作。这样Leaf和Composite类对外就呈现了一样的接口。但是这些对子对象进行操作的方法对Leaf类没有意义。调用Leaf类的这些方法时反而容易出现运行时错误。
安全式合成模式是在Composite类中定义对子对象的操作,而在接口中并不声明。这样的好处是不会对Leaf类的对象调用对子对象的操作。但这样对外提供的接口就不完全一致了。如上图所示的即为安全式合成模式。
相关文章推荐
- 《JAVA与模式》之合成模式
- 8.Composite(合成模式、个别-整体模式)
- 策略模式与合成模式
- 设计模式原则—合成/聚合复用原则(四)
- (八)Java设计模式之合成模式
- 设计模式c#语言描述——建造者模式、适配器模式、合成(Composite)模式
- 设计模式之合成模式(Java语言描述)
- 设计模式-合成复用原则
- Java设计模式(六)合成模式 享元模式
- 设计模式-OOD的设计原则(5)-"合成聚合复用原则"
- CSS中的合成与混合模式
- 1.8、合成模式
- 第五个设计模式:合成模式
- 合成模式
- 合成模式(Composite Pattern)
- 合成(Composite)模式
- 设计模式c#语言描述——合成(Composite)模式
- 设计模式- 合成/组合原则
- 设计模式学习笔记--合成(Composite)模式
- 合成(Composite)模式