代码改变世界

组合模式

2011-07-21 17:08  卫佳  阅读(200)  评论(0编辑  收藏  举报

 

   在大学的数据结构这门课上,树是最重要的章节之一。还记得树是怎么定义的吗?树 

(Tree)n(n≥0)个结点的有限集T为空时称为空树,否则它满足如下两个条件: 

1)  有且仅有一个特定的称为根(Root)的结点; 

2)  其余的结点可分为m(m≥0)个互不相交的子集TlT2Tm,其中每个子集本身又 

    是一棵树,并称其为根的子树(SubTreeMetal Sunglasses)。 

    上面给出的递归定义刻画了树的固有特性:一棵非空树是由若干棵子树构成的,而子树 

又可由若干棵更小的子树构成。而这里的子树可以是叶子也可以是分支。 

    今天要学习的组合模式就是和树型结构以及递归有关系。 

二、定义与结构 

    组合(Composite)模式的其它翻译名称也很多,比如合成模式、树模式等等。在《设计 

模式》一书中给出的定义是:将对象以树形结构组织起来,以达成部分-整体的层次结构, 

使得客户端对单个对象和组合对象的使用具有一致性。 

    从定义中可以得到使用组合模式的环境为:在设计中想表示对象的部分-整体层次结 

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

    看下组合模式的组成。 

1)  抽象构件角色(ComponentAcetate Sunglasses):它为组合中的对象声明接口,也可以为共有接口实现缺省 

    行为。 

2)  树叶构件角色(Leaf):在组合中表示叶节点对象——没有子节点,实现抽象构件角色声 

     明的接口。 

3)  树枝构件角色(Composite):在组合中表示分支节点对象——有子节点,实现抽象构件 

    角色声明的接口;存储子部件。