簡介
單例模式確保某個類只有乙個例項,而且自行例項化並向整個系統提供這個例項。在計算機系統中,任務管理器、執行緒池、快取、日誌物件、對話方塊、印表機、顯示卡的驅動程式物件常被設計成單例。在專案當中,系統啟動讀取配置檔案就需要單例保證配置的一致性。
要點與實現要點
實現實現單例模式方式
餓漢式
/** 餓漢式單例模式*/
public class singleton //私有構造器
/** jvm只為靜態分配一次記憶體,在載入類的過程中
* 完成靜態變數的記憶體分配,天然的是執行緒安全的
*/private static singleton singleton=new singleton();
public static singleton getinstance()
}
懶漢式
/** 懶漢式單例模式*/
public class singleton //私有構造器
private static singleton singleton=null;//靜態變數
/*** 延遲載入,需要的時候初始化,方法加鎖,併發效率低
*/public static synchronized singleton getinstance()
return singleton;}}
雙重鎖(餓漢式變種)
/**雙重鎖單例模式*/
public class singleton //私有構造器
private static volatile singleton singleton=null;//靜態變數 可見性和指令重排序都保證
/*** 避免整個方法被鎖,只對需要鎖的**部分加鎖,可以提高執行效率。
*/public static singleton getinstance()}}
return singleton;}}
靜態內部類實現
/**靜態內部類模式*/
public class singleton //私有構造器
private static class singletonclassinstance
public static singleton getinstance()
}
靜態**塊實現
/**靜態**塊實現**/
public class singleton //私有構造器
private static singleton singleton=null;//靜態變數
//靜態**塊
static
public static singleton getinstance()
}
列舉類實現
/*列舉的單例模式*/
public class singleton //私有構造
public static singleton getinstance()
/*目前最為安全的實現單例的方法是通過內部靜態enum的方法來實現,
*因為jvm會保證enum不能被反射並且構造器方法只執行一次。*/
private enum singletonenum
public singleton getinstance()}}
反射攻擊示例
設計模式之建立型模式 單例模式
在單例模式下,乙個類負責建立自己的例項,且這個類只能建立乙個唯一的例項物件,外部可以直接訪問這個例項物件,單例模式常用於物件的建立。建立單例模式時,建構函式是私有的這樣才能保障,在外部無法建立類例項化物件。單列模式的優點 1 保證在記憶體中只有乙個當前類的例項化物件,減小記憶體的開銷 2 避免資源的...
設計模式之建立型模式 單例模式
單例模式,顧名思義就是只存在乙個類的例項,避免多例項造成的記憶體浪費。public class singletonpattern private static singletonpattern singleton new singletonpattern public static singleto...
設計模式 建立型模式之單例模式
單例模式,顧名思義,用來保證乙個物件只能建立乙個例項,除此之外,它還提供了對例項的全域性訪問方法。單例模式的實現非常簡單,只由單個類組成。為確保單例例項的唯一性,所有的單例構造器都要被宣告為私有的 private 在通過靜態方法實現全域性訪問該單例例項。public class singleton ...