两个类之间的“创建” /实例化关系是什么?

时间:2019-06-06 17:31:51

标签: design-patterns

摘自Gamma等人的《设计模式》

  

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

     

没有钻石的箭头线   表示相识(例如LineShape保留对Color对象的引用,而其他   形状可以共享)。参考名称可能会出现在底座附近以区别   其他参考文献

     

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

     

enter image description here

我想了解这本书对“创造”关系的含义。

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

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

1 个答案:

答案 0 :(得分:1)

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

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

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