您的位置:首页 > 其它

[设计模式]Composite(组合)——对象结构型模式

2012-10-16 10:59 906 查看
1、意图

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

2、动机

Composite模式的关键是一个抽象类,它既可以代表图元,又可以代表图元的容器。Composite使用递归组合来进行实现。

3、适用性

1)想表示对象的部分-整体层次结构。

2)希望用户忽略组合对象与单个对象的不同,用户将统一地使用组合结构中的所有对象。

4、结构



5、参与者

1)Component

-为组合中的对象声明接口。

-在适当的情况下,实现所有类共有接口的缺省行为。

-声明一个接口用于访问和管理Composite的子组件。

2)Leaf

-在组合中表示叶节点对象,叶节点没有子节点。

-在组合中定义图元对象的行为。

3)Composite

-定义有子部件的那些部件的行为。

-存储子部件

-在Component接口中实现与子部件有关的操作。

4)Client

-通过Component接口操纵组合部件的对象。

6、协作

用户使用Component类接口与组合结构中的对象进行交互。如果接收者是一个叶节点,则直接处理请求。如果接收者是Composite,它通常将请求发送给它的子部件,在转发请求之前/之后可能进行一些辅助操作。

7、效果

1)定义了包含基本对象和组合对象的类层次结构

基本对象可以被组合成更复杂的组合对象,而这个组合对象又可以被组合,这样不断递归下去。客户代码中,任何用到基本对象的地方都可以是组合对象。

2)简化客户代码

客户可以一致的使用组合结构和单个对象。通常用户不知道(也不关心)处理的是一个节点还是一个组合组件。这就简化了客户代码,因为在定义组合的那些类中不需要写一些充斥着选择语句的函数。

3)使得更容易增加新类型的组件

新定义的Composite或Leaf子类自动地与已有的结构和客户代码一起工作,客户程序不需要因新的Component类而改变。

4)使你的设计更加一般化

容易增加新组建也会产生一些问题,那就是很难限制组合中的组件。有时你希望有些组合只能有某些特定的组件。使用Composite时,你不能依赖类型系统施加这些约束,而必须在运行时检查。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: