【c++ Design Pattern Structural】Composite(组合)

·模型目的:

将对象组合成树形结构以表示“部分-整体”的层次结构,使得用户对单个对象和组合对象的使用具有一致性!
(从字面的理解可以看出该模式用于构建树形结构,而对于树形结构,关键点在于叶子和节点,如何对待它们,所以该模式重点落在在从对象图得出相应类图)
适用性:
①表示对象的“部分”-“整体”层次结构
②用户忽略组合对象与单个对象的不同,用户将统一地使用组合结构中的所有对象。
模型图:
类图:

(这里有必要区分类图和对象图,由于重点应该落在对象图上,而类图是构建对象图的关键!)

我们的重点在于如何实现上面的对象图,对象图虽然是一个比较复杂的树形结构,但是可以归纳出几个特点:
①树中仅存在两种类型的元素,叶子与节点,而节点是不存储数据只包含下一个节点或叶子的指针,叶子是只存储数据。
②树的结构如果将其拆分,可以分成每一个由以节点为父节点的支架。
通过上面的对象图以及以上两个特性,其实类图就已经建立出来了。
节点与叶子分别是两种不同的派生类,而派生自一个基类。通过对基类编写接口函数,则节点和叶子拥有共同的操作,即可以实现叶子与节点的统一控制(即部分与整体的公平对待)
这里所产生的效果十分明显!
1.组合对象由基本对象来进行组合,又可以由组合对象进行组合,得出复杂的组合结构。
2.一致性的对组合对象或基本对象进行操作。
3.容易增加新类型组件。

关注技术

①最大化Component接口
这是用来使用户不知道他们正在使用的是叶子还是节点类。而对应这个技术所带来的问题即是类层次结构设计原则:一个类只能定义那些对它的子类有意义的操作(关键就在于子类如何隐藏某些基类无需的操作)。实现这种技术往往采用缺省操作实现。通过基类定义缺省操作,然后子类进行派生多态这些操作来达到所需所用。(而在缺省操作中,节点管理子部件的相关操作对于叶子而言往往是多余的)
②管理子部件操作:



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值