我当时正在处理据称使用工厂模式的 Java 代码,但我并不完全相信该模式。
我的代码是这样做的:
// the factory
class SomeFactoryImpl {
Set<SomeClass> getSomeListOfObjects();
}
代码中的某处:
{ ...
SomeFactory factory = new SomeFactoryImpl();
Set<SomeClass> list = factory.getSomeListOfObjects();
}
我在思考的一点是,如果工厂类没有静态 create() 方法,那么就需要实例化一个工厂,IMO 应该和实例化一样复杂对象本身。
我认为这样的工厂可以返回要生产的对象集合的论点不够好。如果需要在实际从工厂创建对象之前创建工厂实例,我觉得可以有更简洁的解决方法。
我觉得create方法最好是工厂类的静态方法。但我也确信我的观点并不完全“正确”。
那么 SO 社区能否举例说明实例化 Factory 对象比使用静态创建方法更好?
此外,我遇到了一个类似问题的答案,其中列出了这些链接和答案:所以我需要清楚地知道 FactoryMethodPattern 之间的区别。 , FactoryMethod和 CreationMethod带有代码示例。
最佳答案
使用工厂实例显示了与依赖注入(inject)相结合的真正好处。
所以在你的例子中,而不是:
{ ...
SomeFactory factory = new SomeFactoryImpl();
Set<SomeClass> list = factory.getSomeListOfObjects();
}
你会:
public ThisClass(SomeFactory someFactory) {
this.factory = someFactory;
}
然后……
{ ...
Set<SomeClass> list = factory.getSomeListOfObjects();
}
几点:
- 在这种情况下,您的类没有对具体工厂的任何引用,也不需要了解 SomeFactoryImpl,它只知道抽象的 SomeFactory。
- 在这种情况下,传递的工厂实例可以在实例基础上配置,而不是在静态基础上配置,这往往是(在我看来)更好的处理方式。如果您可以使工厂实例不可变,那么您就可以真正减少对多线程的担忧。
- 通过静态调用为您提供一个实例并没有好多少,对创建它的类的引用仍然是一个具体的实现细节,它只是更高了——尽管它可能足够高以解决您的问题.
我知道这只解决了您问题的一部分...
关于java - java中的工厂模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1026463/