据我所知,工厂设计模式用于创建对象而不是构造函数
在之前的一个问题中我解释了我的情况,即:
我有一个复杂的网络表示为超图
超图顶点来自各种类型:图像,标签....
我应该创建数千个顶点
手动创建它很难!
所以我认为在这种情况下工厂模式可能对我有帮助
我使用yUML绘制了两个可能的图表,但我无法确定哪种情况最适合我的情况
答案 0 :(得分:2)
实际上,两者都描述了工厂方法模式。
但是,正如我们所说的多工厂一样,第一张图片是更好,更少耦合,更易于扩展,更易于维护的方法。
只是,在第一张图片中,由于您的图表较小,最好将AbstractVertexFactory
的虚线放到Vertex
,因为这些之间有一个dependency relationship类。
此外,第二个图像缺少所有虚线依赖行。这个不会使这个图表不正确,并且它仍然描绘了工厂方法模式,唯一的缺点是没有上面提到的行就更容易混淆。
解释为什么第一个优于第二个:
TagVertex
,则ImageFactory
(以及其他潜在工厂)的客户端不会受到影响。Vertex
),则不会影响其他工厂的客户。您也可以自由添加工厂,而无需更改现有代码。答案 1 :(得分:2)
图一是正确的选择。
抽象工厂用于创建相关或依赖对象的族。 在这种情况下,Abstract veretx工厂(通过使用Tag或Image工厂的具体类)将创建具体产品(Tag Vertex和Image vertex) 分别
如果是第二张图,产品和抽象工厂之间没有关系。 抽象工厂应该创建混凝土产品(在这种情况下使用混凝土工厂类Image Vertex和Tag Vertex)