我想在 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();
}
哪个更好,这些类型的惰性实例化与急切实例化的考虑因素是什么?