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;
}
}
}