场景:
EntityA->独立
EntityB->独立
EntityC->由EntityA,EntityB和其他一些数据组成
EntityC
的对象创建需要来自EntityA
和EntityB
的一些数据,我对如何为EntityC
构建工厂类感到困惑
方法1:
将创建EntityA
和EntityB
所需的数据作为参数传递给FactoryC.create()
,并导入FactoryA
和FactoryB
以初始化{{1}中的对象}
在这里,我可以使对象创建的逻辑与我的应用程序完全隔离(这是使用工厂的主要目的),但是FactoryC.create()
将取决于FactoryC
和FactoryA
方法2:
在我的应用程序中初始化FactoryB
和EntityA
的对象(超出工厂范围)并将这些对象传递给EntityB
在这里,FactoryC.create()
将独立于FactoryC
和FactoryA
,但缺点是我必须将用于创建对象的逻辑放入我的应用程序(工厂外部)中>
以编程方式,这两种方法将产生相同的结果,但是我想知道哪种方法在结构化我的代码方面会更好。我最关心的是要知道是否在Factory类之间创建依赖关系。
答案 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());
}