工厂、单例、最佳实践



我想在Java中正确实现工厂模式。我已经这样做了(下面的代码),任何人都可以指出这是否是一种"正确"的方式,或者有任何设计缺陷?

我的想法/限制是:

  • 必须有其他东西可以子类化这个工厂,所以我没有选择让它成为一个枚举。
  • 我把它变成了一个单例工厂,这样就不会有其他工厂在乱跑
  • 我想让它线程安全,所以我选择将同步锁定放在self
  • 工厂里没有一吨的东西,所以性能(空间/时间)没什么大不了
  • 的。

代码如下所示:

public class MyFactory {
    private static MyFactory self;
    private MyFactory() {
        synchronized (self) {
            if (self == null) {
                self = new MyFactory();
            }
        }
    }
}

这段代码会给我带来问题吗?

另一种选择是这样的

public class MyFactory { 
    private static MyFactory self = new MyFactory();
}

哪一个更好,这些类型的惰性实例化与急切实例化的注意事项是什么?

一种批评是,能够子类要求和单例要求不一致 - 如果你想能够子类工厂,你必须使构造函数不是私有的,这使得工厂不是单例。

最新更新