【问题标题】:Should Factory Class' create() method be static? Or make Factory Class singleton?工厂类的 create() 方法应该是静态的吗?或者制作工厂类单例?
【发布时间】:2013-09-25 02:46:27
【问题描述】:

标题几乎概括了它。

我有一个工厂类,它会在调用create() 方法时构造另一个类的实例。我已将我的工厂类设置为单例,这会强制调用看起来像这样:

SomeClass clazz = (SomeClass) FactoryClass.getInstance().create(ENUM.TYPE);

这保证了我的工厂是线程安全的,但可能会导致阻塞等。

如果我的工厂不是单例,我可以改为将我的 .create() 方法设置为 static,这将获得类似的结果。

SomeClass clazz = (SomeClass) FactoryClass.create(ENUM.TYPE);

假设多个线程可能会尝试通过 FactoryClass 创建对象实例,哪个更好?难道这两种方法都不能提供相同级别的线程安全吗?

【问题讨论】:

  • 线程安全将来自所有在本地创建的必要对象,即。在方法体中。
  • 单例方法允许您在工厂的多个实现之间切换。
  • @Detheroc 在多个工厂中?我不确定我是否理解,抱歉。
  • 除了@Detheroc:单例方法允许您将工厂的(该)实例传递给另一个方法。
  • @SnakeDoc 错字,已更正:)

标签: java singleton factory-pattern


【解决方案1】:

两者都不会影响线程安全。线程问题存在于create 方法的实现中。静态方法可以创建实例(或获取单例)并调用实例方法,因此没有区别。

公开单例只是一种 API 选择,您希望它的外观和感觉如何。

也就是说,在测试环境中模拟静态方法更具挑战性,因此可能需要考虑这一点。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-01-01
    相关资源
    最近更新 更多