《C++面向对象软件设计及构建》文章翻译:1.5组合/利用聚合实现组合,1.5 Composition/Composition Using Aggregation
聚合,也是一种 组合 。在这种形式中,整体是由多个部分组成,并且这些部分都被封装及隐藏起来,如下图所示。与关联不同的是,在聚合中,各个部分在外部是不可见的,在该组合的用户看来,它们并不具有身份标识,并且,它们不具有关联中各个部分所具有的那种程度的自治性。整体上就是单个可见的实体。由此,产生以下定义。
一种 组合 ,它将组合中的各个部分封装(隐藏)起来。
下图,聚合的结构,展示了,由聚合所定义的对象的一般模型。外层的对象,包含着内层(被封装的)子对象,而那些子对象自身可能也拥有隐藏的内部对象(子子对象)……
|
|
聚合方式的组合,在我们所熟知的大量自然及人造系统中出现过。下表展示了,一些常见的系统与上图的结构之间的对应关系。
对象 |
子对象 |
子子对象 |
汽车 |
发动机 |
活塞 |
电脑 |
主板 |
处理器芯片 |
分子 |
原子 |
夸克 |
对象的聚合,具体是这样创建的:让一个对象(即为整体)在其封装的数据中包含一个或多个其它对象(各个部分)。之前使用关联方式创建的简单的一秒超时的定时器,也可以使用聚合方式来实现,如下图所示。在这个图中,组成定时器的那些基本对象(Clock、Counter、TextBox、Frame、Start和Stop),都被包含在其它的对象(TimedCounter、Display和ControlButtons)中,而那些对象呢,本身又被包含在一个单独的封装对象SimpleTimer 中。注意,从外部来看,只有SimpleTimer 是可见的;其它的对象,都被隐藏在SimpleTimer 对象的封装边界之内了。
通过聚合实现组合 |
|
聚合的一个好处就是,在使用外层对象的过程中,不需要关注内层的子对象是如何工作的,甚至都不需要关注它们是否存在。在驾驶汽车的时候,我们狠少会去关注组成汽车的那成千上万个部件是如何工作的。这种忽略对象的细微结构的能力,大大地简化了对系统工作原理进行理解的工作,也简化了构建以特定方式运行的系统的工作。聚合的另一个好处就是,可以改变内部的部件,而不影响用户对象外部整体的观察效果。各个部件的内部结构可以被完全改变,也可以只替换单个部件。对于效率、可靠性或成本的改进,都可能驱使对部件进行替换。
追逐
未知美人
Your opinionsHxLauncher: Launch Android applications by voice commands