單例模式

單例(Singleton)模式的定義:指一個類只有一個實例,且該類能自行建立這個實例的一種模式。安全

單例模式有 3 個特色:spa

  1. 單例類只有一個實例對象;
  2. 該單例對象必須由單例類自行建立;
  3. 單例類對外提供一個訪問該單例的全局訪問點。

餓漢式單例code

package single;

//餓漢式單例
public class hungry {
    //構造器私有化
    private hungry(){

    }

    //一啓動類就直接加載
    //可能會形成內存浪費
    byte[] byte1=new byte[1024*1024];
    byte[] byte2=new byte[1024*1024];
    byte[] byte3=new byte[1024*1024];
    byte[] byte4=new byte[1024*1024];

    private final static hungry hun=new hungry();

    public static hungry getHun(){
        return hun;
    }
}

 

懶漢式單例對象

package single;

//懶漢式單例
public class LazyMan {

//    構造器私有化
    private LazyMan(){

    }

    private volatile static LazyMan lazyMan;

//  雙重檢測鎖的懶漢式單例  DCL單例模式
    public  static LazyMan getInstance(){
//      提升效率,這一層if判斷
        if (lazyMan==null){
            //        加鎖
            synchronized (LazyMan.class){
                if(lazyMan==null){
                    lazyMan=new LazyMan();//不是原子性操做,不要在屬性值上加volatile
                }
            }
        }

        return lazyMan;
    }
}

 

靜態內部類單例blog

package single;

//靜態內部類
public class Holder {
//    構造器私有
    private Holder(){

    }

//    調用靜態內部類
    public static Holder getInstance(){
        return holder.HOLDER;
    }

//    靜態內部類
    public static class holder{
        private final static Holder HOLDER=new Holder();
    }
}

 

這三種是不安全的單例模式,能夠經過反射拿到類中的屬性和方法內存

以後更新枚舉單例模式get

相關文章
相關標籤/搜索