單例模式-單例模式

1.餓漢式-單例模式

package com.tedu.day51;
//餓漢式單例模式: 當MYSingleTonHungry類被加載到內存時執行創建對象的代碼(創建MYSingleTonHungry對象)
public class Test2_SingleTon {
    public static void main(String[] args) {//當調用getObj方法時就返回加載MYSingleTonHungry類時創建的對象
        MYSingleTonHungry mth=MYSingleTonHungry.getObj();
    }//因爲是還沒有到用getObj獲取對象的時候就創建了MYSingleTonHungry對象. 所以稱作餓漢式
}   //還沒到需要喫飯的時候就喫飯


class MYSingleTonHungry{
    private  static  MYSingleTonHungry obj=new MYSingleTonHungry();
    private MYSingleTonHungry(){}
    public static MYSingleTonHungry getObj() {
        return obj;
    }
}

2.懶漢式單例模式:

package com.tedu.day51;
//懶漢式-單例模式
public class Test3_SingleTon {
    public static void main(String[] args) {
       MySingleton2 ms2=MySingleton2.getMySt();
       System.out.println(ms2==null);
    }
}

class MySingleton2{
    //i.私有化構造方法(不能隨便new對象)
    private MySingleton2(){}
    //ii.在類的內部,創建好一個對象--需要時發現對象不存在,再new(延遲加載)
    static private  MySingleton2 my;
    //iii.給全局設置一個公共的訪問點--getMySt。 當getMySt執行時發現需要獲取的對象不存在再new對象出來
    static  public  MySingleton2 getMySt(){
        synchronized (MySingleton2.class){
            if(my==null){//注意:同步代碼資源是靜態資源,同步監視器對象(鎖對象)必須是當前類的字節碼對象
                my=new MySingleton2();
            }
            return my;
        }
    }
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章