关于单态模式的问题
那么这个到底能不能行那?
可能我用了"双重成例检查",但是我不知道它叫"双重成例检查",你能告诉我吗?
一般在国外市面上公认三套设计模式的名称 GOF98、Grand99 还有一个名字忘记了,是关于并行模式的。
我们自己都可以发明自己命名设计模式,但是能否得到公认,另当别认。
if (factory == null) {
synchronized(initLock) {
if (factory == null) {
try {
Class c = Class.forName(className);
factory= (AuthorizationIF)c.newInstance();
}catch (Exception e) {
throw new Exception("Exception loading AuthorizationIF
class: " +className + e);
}
}
}
}
说真的,我也搞不清楚double check lock到底有多大的好处,是对方法的同步开销太大吗???
注意到lazy initialization形式中的synchronized,这个synchronized很重要,如果没有synchronized,那么使用getInstance()是有可能得到多个Singleton实例。关于lazy initialization的Singleton有很多涉及double-checked locking (DCL)的讨论,有兴趣者进一步研究。
一般认为第一种形式要更加安全些。
引用至:首页的工厂方法
为什么第一安全些而第二种被jive采用?
是不是第二种在不设及ejb和分布式多jvm时也是安全的?