設計模式之單例模式 建立型模式

2021-09-16 12:06:32 字數 2001 閱讀 5662

簡介

單例模式確保某個類只有乙個例項,而且自行例項化並向整個系統提供這個例項。在計算機系統中,任務管理器、執行緒池、快取、日誌物件、對話方塊、印表機、顯示卡的驅動程式物件常被設計成單例。在專案當中,系統啟動讀取配置檔案就需要單例保證配置的一致性。

要點與實現要點

實現實現單例模式方式

餓漢式

/** 餓漢式單例模式*/

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 ...