关于单态模式的问题

在阎宏的java与模式中,他讲到双重成例检查在大多数情况下是不能在java环境下成立的,不是很明白,看斑竹的代码中好象就用了这个东西
那么这个到底能不能行那?

为什么banq不回这帖子?是不是提到阎宏博士,心里狠狠的!
开玩笑:)

:) 不过,看了这位博士的书的目录,除了GOF的23个设计模式我看得懂外,其它我真的掉入云里雾里。

可能我用了"双重成例检查",但是我不知道它叫"双重成例检查",你能告诉我吗?

一般在国外市面上公认三套设计模式的名称 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-checked locking

对哦对哦,阎宏同志说类的初始化和变量的初始化的顺序不可预料,因此
如果在别的地方引用到该实例后后果不可预料,还是对方法同步最安全。

说真的,我也搞不清楚double check lock到底有多大的好处,是对方法的同步开销太大吗???

上面第二中形式是lazy initialization,也就是说第一次调用时初始Singleton,以后就不用再生成了。

注意到lazy initialization形式中的synchronized,这个synchronized很重要,如果没有synchronized,那么使用getInstance()是有可能得到多个Singleton实例。关于lazy initialization的Singleton有很多涉及double-checked locking (DCL)的讨论,有兴趣者进一步研究。

一般认为第一种形式要更加安全些。
引用至:首页的工厂方法
为什么第一安全些而第二种被jive采用?
是不是第二种在不设及ejb和分布式多jvm时也是安全的?

DCL是有一些好处,主要是不必每次重新生成对象。网上有很多关于DCL的讨论,这里面学问很大,钻进去,发现有一堆理论,我是头疼了。

晕,一连看了好几天,云里雾里,好几十种模式,现在的工程用的却不多,也就那么几种,不过还是为中国的文化底蕴惊叹.