结构模式之Composite——合成(部分-整体)模式

1、简介
   
结构模式将对象以树形结构组织起来,以达成部分-整体的层次结构,使得客户端对单个对象和组合对象的使用具有一致性。结构模式有时候又叫做部分-整体模式,它使我们树型结构的问题中,模糊了简单元素和复杂元 素的概念,客户程序可以向处理简单元素一样来处理复杂元素,从而使得客户程序与复杂元素的内部结构解耦。

   
合成模式的实现根据所实现接口的区别分为两种形式,分别称为安全模式透明模式。合成模式可以不提供父对象的管理方法,但合成模式必须在合适的地方提供子对象的管理方法(诸如:addremovegetChild等)。

   
透明方式
   
作为第一种选择,在Component里面声明所有的用来管理子类对象的方法,包括add()remove(),以及getChild()方法。这样做 的好处是所有的构件类都有相同的接口。在客户端看来,树叶类对象与合成类对象的区别起码在接口层次上消失了,客户端可以同等同的对待所有的对象。这就是透 明形式的合成模式。
   
这个选择的缺点是不够安全,因为树叶类对象和合成类对象在本质上是有区别的。树叶类对象不可能有下一个层次的对象,因此add()remove()以及getChild()方法没有意义,是在编译时期不会出错,而只会在运行时期才会出错。

   
安全方式
   
第二种选择是在Composite类里面声明所有的用来管理子类对象的方法。这样的做法是安全的做法,因为树叶类型的对象根本就没有管理子类对象的方法,因此,如果客户端对树叶类对象使用这些方法时,程序会在编译时期出错。
   
这个选择的缺点是不够透明,因为树叶类和合成类将具有不同的接口。

   
这两个形式各有优缺点,需要根据软件的具体情况做出取舍决定。

2
、使用场景及能解决的问题
   
需要描述对象的部分和整体的等级结构。
   
需要客户端忽略掉个体构件和组合构件的区别。客户端必须平等对待所有的构件,包括个体构件和组合构件。
   
下面看一个实际的例子:算术表达式。算术表达式包括操作数、操作符和另一个操作数。操作数可以是数字,也可以是另一个表达式。这样,2+3和(2+3+4*6)都是合法的表达式。


 3、类图


    下面看看两种不同的实现方式的合成模式对应的类图

     安全方式:


     透明方式:


4、优缺点

    优点:
    合成模式可以很容易地增加新种类的构件。
    使用合成模式可以使客户端变得很容易设计,因为客户端不需要知道构件是树叶构件还是树枝构件。
    缺点:
    使用合成模式后,控制树枝构件的类型就不太容易。
    用继承的方法来增加新的行为很困难。

   


posted on 2008-06-23 22:29 云淡风清 阅读(393) 评论(0)  编辑  收藏 所属分类: Design Patterns


只有注册用户登录后才能发表评论。


网站导航:
 
<2008年6月>
25262728293031
1234567
891011121314
15161718192021
22232425262728
293012345

导航

统计

常用链接

留言簿(1)

随笔分类(15)

随笔档案(15)

收藏夹(1)

搜索

最新评论

阅读排行榜

评论排行榜