这是正确的工厂方法用法

时间:2013-04-11 17:18:15

标签: java design-patterns graph factory-pattern

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

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

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

first diagram

second diagram

2 个答案:

答案 0 :(得分:2)

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

但是,正如我们所说的多工厂一样,第一张图片是更好,更少耦合,更易于扩展,更易于维护的方法。

只是,在第一张图片中,由于您的图表较小,最好将AbstractVertexFactory的虚线放到Vertex,因为这些之间有一个dependency relationship类。

此外,第二个图像缺少所有虚线依赖行。这个不会使这个图表不正确,并且它仍然描绘了工厂方法模式,唯一的缺点是没有上面提到的行就更容易混淆。

解释为什么第一个优于第二个

  • 较少耦合:在第一种情况下,如果您更改/删除TagVertex,则ImageFactory(以及其他潜在工厂)的客户端不会受到影响。
  • 更具扩展性更易于维护:同样的原则。如果更改产品(方案中为Vertex),则不会影响其他工厂的客户。您也可以自由添加工厂,而无需更改现有代码。

答案 1 :(得分:2)

图一是正确的选择。

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

如果是第二张图,产品和抽象工厂之间没有关系。 抽象工厂应该创建混凝土产品(在这种情况下使用混凝土工厂类Image Vertex和Tag Vertex)