3

据我了解,工厂设计模式用于创建对象而不是构造函数

在上一个问题中,我解释了我的情况:
我有一个复杂的网络,表示为超图超图顶点来自各种类型:图像,标签....
我应该创建数千个顶点,手动创建它会很困难!所以我认为在这种情况下工厂模式可能会对我有所帮助

我使用 yUML 绘制了两个可能的图表,但我无法确定最适合我的情况

第一张图

第二张图

4

2 回答 2

2

实际上,两者都描述了工厂方法模式。

但是,正如我们所说的多工厂,第一个映像是一种更好、耦合更少、更可扩展、更易于维护的方法。

AbstractVertexFactory只是,在第一张图中,由于您有一个很小的图表,最好从到放置一条虚线Vertex,因为这些类之间存在依赖关系。

此外,第二张图片缺少所有虚线依赖线。这并没有使这个图不正确,它仍然描绘了工厂方法模式,唯一的缺点是没有提到的线条更加混乱。

为什么第一个比第二个更好的解释

  • 较少耦合:在第一种情况下,如果您更改/删除TagVertexImageFactory(以及可能的其他工厂)的客户不会受到影响。
  • 更可扩展且更易于维护:相同的原则。如果您更改产品(Vertex在您的场景中)类,则不会影响其他工厂的客户。您也可以自由添加工厂,而无需更改现有代码。
于 2013-04-11T17:26:42.150 回答
2

图一是正确的选择。

抽象工厂用于创建相关或依赖对象的系列。在这种情况下,Abstract veretx factory(通过使用 Tag 或 Image factory 具体类)将分别创建具体产品(Tag Vertex 和 Image vertex)。

在第二张图的情况下,产品和抽象工厂之间没有关系。抽象工厂应该创建具体产品(在这种情况下,通过使用具体工厂类 Image Vertex 和 Tag Vertex)

于 2013-04-11T17:33:59.957 回答