0

我想在 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();
}

哪个更好,这些类型的惰性实例化与急切实例化的考虑因素是什么?

4

1 回答 1

1

一种批评是能够继承要求和单例要求是不一致的——如果你想能够继承工厂,你将不得不使构造函数不是私有的,这使得工厂不是单例的。

于 2013-10-29T00:42:06.050 回答