组合模式
2011-07-21 17:08 卫佳 阅读(200) 评论(0) 编辑 收藏 举报
在大学的数据结构这门课上,树是最重要的章节之一。还记得树是怎么定义的吗?树
(Tree)是n(n≥0)个结点的有限集T,T 为空时称为空树,否则它满足如下两个条件:
1) 有且仅有一个特定的称为根(Root)的结点;
2) 其余的结点可分为m(m≥0)个互不相交的子集Tl,T2,…,Tm,其中每个子集本身又
是一棵树,并称其为根的子树(SubTreeMetal Sunglasses)。
上面给出的递归定义刻画了树的固有特性:一棵非空树是由若干棵子树构成的,而子树
又可由若干棵更小的子树构成。而这里的子树可以是叶子也可以是分支。
今天要学习的组合模式就是和树型结构以及递归有关系。
二、定义与结构
组合(Composite)模式的其它翻译名称也很多,比如合成模式、树模式等等。在《设计
模式》一书中给出的定义是:将对象以树形结构组织起来,以达成“部分-整体”的层次结构,
使得客户端对单个对象和组合对象的使用具有一致性。
从定义中可以得到使用组合模式的环境为:在设计中想表示对象的“部分-整体”层次结
构;希望用户忽略组合对象与单个对象的不同,统一地使用组合结构中的所有对象。
看下组合模式的组成。
1) 抽象构件角色(ComponentAcetate Sunglasses):它为组合中的对象声明接口,也可以为共有接口实现缺省
行为。
2) 树叶构件角色(Leaf):在组合中表示叶节点对象——没有子节点,实现抽象构件角色声
明的接口。
3) 树枝构件角色(Composite):在组合中表示分支节点对象——有子节点,实现抽象构件
角色声明的接口;存储子部件。