设计模式学习笔记--Composite组合模式

组合模式(Composite)是一种“结构型”模式(Structural)。结构型模式涉及的对象为两个或两个以上,表示对象之间的活动,与对象的结构有关。
组合模式适用于两个或者多个类有相似的形式,或者共同代表某个完整的概念,外界的用户也希望他们合而为一,就可以把这几个类“组合”起来,成为一个新的类,用户只需要调用这个新的类就可以了。
因此,组合模式的意图就是:将对象组合成树形结构以表示“部分-整体”的层次结构。Composite模式使得用户对单个对象和组合对象的使用具有一致性。
组合模式可以使客户端将单纯元素与复合元素同等看待。如文件夹与文件就是合成模式的典型应用。根据模式所实现接口的区别,合成模式可分为安全式和透明式两种。
一、安全式:安全式的合成模式要求管理聚集的方法只出现在树枝构件类中,而不出现在树叶构件类中。
涉及到三个角色:

1、抽象构件(Component):这是一个抽象角色,它给参加组合的对象定义公共的接口及其默认的行为,可以用来管理所有的子对象。合成对象通常把它所包含的子对象当做类型为Component的对象。在安全式的合成模式里,构件角色并不定义出管理子对象的方法,这一定义由树枝构件对象给出。
2、树枝构件(Composite):代表参加组合的有下级子对象的对象。树枝构件类给出所有的管理子对象的方法,如Add(),Remove()等。
3、树叶构件(Leaf):树叶对象是没有下级子对象的对象,定义出参加组合的原始对象的行为。

下面我们来实现它
SafeTreeComponent:抽象构件

Code

SafeTreeBranch:树枝构件

Code

SafeTreeLeaf:树叶构件

Code

二、透明式:透明式的组合模式要求所有的具体构件类,不论树枝构件还是树叶构件,均符合一个固定的接口。
涉及到三个角色:

1、抽象构件(Component):这是一个抽象角色,它给参加组合的对象定义公共的接口及其默认的行为,可以用来管理所有的子对象。要提供一个接口以规范取得和管理下层组件的接口,包括Add(),Remove()。
2、树枝构件(Composite):代表参加组合的有下级子对象的对象。定义出这样的对象的行为。
3、树叶构件(Leaf):树叶对象是没有下级子对象的对象,定义出参加组合的原始对象的行为。树叶对象会给出Add(),Remove()等方法的实现。

下面我们来实现它
TransparentTreeComponent:抽象构件

Code

TransparentTreeBranch:树枝构件

Code

TransparentTreeLeaf:树叶构件

Code

客户端应用代码

Code

程序如下图:
                        
运行效果:

                         


 

前往:设计模式学习笔记清单
posted @ 2009-10-03 11:27  wsdj  阅读(773)  评论(0编辑  收藏  举报