java - java中的工厂模式

标签 java design-patterns factory-pattern

我当时正在处理据称使用工厂模式的 Java 代码,但我并不完全相信该模式。

我的代码是这样做的:

// the factory
class SomeFactoryImpl {
   Set<SomeClass> getSomeListOfObjects();
}

代码中的某处:

{ ...
    SomeFactory factory = new SomeFactoryImpl();
    Set<SomeClass> list = factory.getSomeListOfObjects();
}

我在思考的一点是,如果工厂类没有静态 create() 方法,那么就需要实例化一个工厂,IMO 应该和实例化一样复杂对象本身。

我认为这样的工厂可以返回要生产的对象集合的论点不够好。如果需要在实际从工厂创建对象之前创建工厂实例,我觉得可以有更简洁的解决方法。

我觉得create方法最好是工厂类的静态方法。但我也确信我的观点并不完全“正确”。

那么 SO 社区能否举例说明实例化 Factory 对象比使用静态创建方法更好?

此外,我遇到了一个类似问题的答案,其中列出了这些链接和答案:所以我需要清楚地知道 FactoryMethodPattern 之间的区别。 , FactoryMethodCreationMethod带有代码示例。

最佳答案

使用工厂实例显示了与依赖注入(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/

相关文章:

java - 定制@Scheduled Spring

java - Spark Streaming : Using PairRDD. saveAsNewHadoopDataset函数保存数据到HBase

ruby - 什么是 Ruby 工厂方法?

c++ - 工厂模式 : What to do when factory class is too big?

model-view-controller - 是或否:MVC中的模型是否应包含应用程序逻辑?

c# - 工厂是否应该总是创建一个新对象

Java 标志 -XX :+CompileTheWorld usable for Microbenchmarks

Javacard - 签名和验证

design-patterns - 用户/角色管理系统的最佳设计?

java - 无法使用多态访问具体类的唯一属性