首页 > 解决方案 > 两个类之间的“创建”/实例化关系是什么?

问题描述

来自 Gamma 等人的设计模式

表示部分或聚合关系的对象引用由底部带有菱形的带箭头的线指示。箭头指向聚合的类 (例如,Shape)。

没有菱形的带箭头的线表示熟人(例如,LineShape 保持对 Color 对象的引用,其他形状可能共享该对象)。参考名称可能会出现在底座附近,以区别于其他参考

另一个有用的东西是哪些类实例化 了哪些其他类。我们使用带箭头的虚线来表示这一点,因为 OMT 不支持它。我们称之为“创造”关系。箭头指向实例化的类。在图 c 中,CreationTool 创建 LineShape 对象。

在此处输入图像描述

我想了解这本书所说的“创造”关系是什么意思。

当类 A 实例化类 B 时,类 A 必须有一个引用对象 B 的字段成员,还是类 A 必须有一个创建并返回对象 B 的方法?

是否有一些使用“创建”/实例化关系的设计模式(例如,在同一本书中描述)?我找不到它。

标签: design-patterns

解决方案


A 创建 B只是意味着 A 中的代码直接创建 B 的实例——通过使用new关键字。代码可以在 A 的构造函数或任何方法中,也可以在 A 内部的任何地方。

之所以关注这种关系,是因为它是一种关系,即导致类之间的紧耦合。当 A 类直接创建 B 类的实例时,我们不能在不修改 A 的源代码的情况下在希望 A 创建 B 的子类的实例的另一个上下文中重用 A。

为了具有这样的灵活性,我们经常使用工厂方法模式或抽象工厂模式。在这些模式中,直接创建实例的任务属于 A 的子类(工厂方法)或具体工厂类(抽象工厂)。


推荐阅读