工厂,Singleton,最佳实践

时间:2013-10-29 00:37:04

标签: java multithreading thread-safety singleton factory

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

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

1 个答案:

答案 0 :(得分:1)

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