单l例模式

这几天一直在学习设计模式,看到访问者模式有点不太理解,上javaeye搜索到兽王Rjx2008的博客,发现不少好东西。
先看了个常见的单例模式,刚接触设计模式买了本大话设计模式,讲到单例模式时关于多线程,用了双重检查锁DCL,不过在兽王的博客里对其否定了,来看看兽王是怎么讲解的吧。
不容易掌握的单例模式


小知识:单例模式有两种,饱汉、饿汉。顾名思义饿汉是饥不择食,强行创建,而饱汉则会挑挑食。
//饿汉式
Class A{

         private static A a=new A();

        private A(){}

       public A getA(){

            return   a;

      }

}

//饱汉式
class B{

    private static B b;

     private B(){}

     public B getB(){

           if(b!=null){

                return b;

             }else{

               b=new B();

              retrun b;

            }

    }

}



兽王对多线程情况下单例迷失应用的处理是:
 public class Singleton {  
   
      private Singleton(){  
            
     }  
      //静态内部类  
      static class SingletonInner{  
         static Singleton instance = new Singleton();  
      }  
             public static Singleton getInstance(){  
        return SingletonInner.instance;  
      }  
 }


原因:使用静态内部类!它是由一个叫Bob Lee的人写下来的(最初忘记了是哪两个人提出)。在加载singleton时并不加载它的内部类SingletonInner,而在调用 getInstance()时调用SingletonInner时才加载SingletonInner,从而调用singleton的构造函数,实例化 singleton,从而在不需要同步的情况下,达到延迟初始化的效果。 


文中的内容均是兽王Rjx2008的出品, 链接

你可能感兴趣的:(设计模式,多线程,Blog)