工厂类(以工厂设计模式)可以依赖于其他一些独立的工厂类吗?

时间:2018-08-12 13:42:41

标签: oop design-patterns factory-pattern

场景:

EntityA->独立

EntityB->独立

EntityC->由EntityA,EntityB和其他一些数据组成

EntityC的对象创建需要来自EntityAEntityB的一些数据,我对如何为EntityC构建工厂类感到困惑

方法1:

将创建EntityAEntityB所需的数据作为参数传递给FactoryC.create(),并导入FactoryAFactoryB以初始化{{1}中的对象}

在这里,我可以使对象创建的逻辑与我的应用程序完全隔离(这是使用工厂的主要目的),但是FactoryC.create()将取决于FactoryCFactoryA

方法2:

在我的应用程序中初始化FactoryBEntityA的对象(超出工厂范围)并将这些对象传递给EntityB

在这里,FactoryC.create()将独立于FactoryCFactoryA,但缺点是我必须将用于创建对象的逻辑放入我的应用程序(工厂外部)中

以编程方式,这两种方法将产生相同的结果,但是我想知道哪种方法在结构化我的代码方面会更好。我最关心的是要知道是否在Factory类之间创建依赖关系。

2 个答案:

答案 0 :(得分:0)

  • 是的,您的工厂类别可以依赖于其他工厂类别。称为工厂工厂(抽象工厂模式)

  • 如果使用接口创建相关对象的工厂而不显式指定其类,则它也可以是独立的。我更喜欢方法一。

答案 1 :(得分:0)

方法之一是有效的工厂模式,因为工厂模式仅描述了隔离对象创建的方式。 我认为您的意图是询问工厂模式是否可以依赖于其他对象的类/模型,而不是工厂(至少是您所描述的,但这不会改变工厂可以依赖于另一个工厂的事实)。

在Factory C中,您可能会遇到类似这样的事情:

public class FactoryC implements Factory {
  public AbstractEntity get() { //or however your entity's abstraction looks like
  EntityA  eA= FactoryA.get();
  EntityB eB = FactoryB.get();
  return new EntityC(eA.someMethod(), eB.someMethod());
}