|
|
1
7
术语“组合”和“聚合”的意思大致相同,可以互换使用。在描述容器类(如列表、动态数组、映射和队列)时,可以更频繁地使用聚合,其中元素都是相同类型的;但是,这两个术语都可以用来描述根据其他类定义的类,而不管这些类型是同质的(所有相同的类型)还是异质的(不同类型的对象)。 为了更清楚地说明这一点:
抽象和实现之间的关系通常意味着继承,而不是组合/聚合;通常,抽象是一个接口或虚拟基类,实现是一个实现给定接口的完全具体的类。但是,为了使事情变得混乱,组合/聚合可以是接口的一部分(例如,因为您可能需要设置/获取用作构建块的对象),并且它们也是实现的一种方法(因为您可以使用委托为实现中的方法提供定义)。 为了更清楚地说明这一点:
既然您已经将您的问题标记为“bridge”,我应该指出bridge模式的定义是这样一种模式,即您使用组合而不是继承来允许在多个不同级别上的变化。我在大学学到的一个例子。。。使用继承,您可能会遇到以下情况:
正如你所看到的,这种事情变得非常疯狂,你得到了一个荒谬的类数量。同样的事情,在桥的模式下,看起来是这样的:
|
|
2
2
桥接模式必须使用委托(聚合/组合,而不是继承)。来自四人帮的书:
|
|
|
3
0
桥接模式的标准UML清除了混乱周围的所有空气。下面用一个简单的例子来说明这个问题。 很抱歉,这个冗长的代码,最好的方法是复制这个代码到visualstudio,以便于理解。
--ISpeak是botdog和Cat必须实现的抽象 --狗和猫类扩展了动物类,因此与ISpeak分离。 希望这能澄清 |
|
|
simply lemon · python上链表的添加方法 2 年前 |
|
|
Anonymous · 为什么在这个例子中self和类名的用法不同? 2 年前 |
|
|
P N Singh · 在CPP Oops中调用对象而不创建它 2 年前 |
|
|
Muthuraj · 如何创建一个通用工厂来创建某种类型的实例[重复] 2 年前 |
|
|
Andy Votava · 从父类定义调用学生方法 2 年前 |