定義:單例模式是一種物件建立模式,用於產生一個物件的具體例項,他可以確保系統中一個類只產生一個例項。
單例模式類圖:
類圖解釋:其中包含兩個角色,單例類(Singleton)和使用者(SingletionMain) 該類圖解釋為:單例類為一個自身關聯,使用者對單例類為一個單向關聯(引用)優點:
- 對於頻繁使用的物件,可以省略穿件物件所花費的時間,這對於那些重量級物件而言,是非常可觀的一筆系統開銷。
- 由於new操作的次數減少,因而對系統記憶體的使用頻率也會降低,這將減輕GC壓力,縮短GC停頓時間。
實現方式:
使用靜態內部類的方式實現單例,既可以做到延遲載入,也不必要使用同步關鍵字,是一種比較完善的實現。
public class StaticSingleton {
private StaticSingleton (){}
private static class SingletonHolder{
private static Singleton instance = new Singleton();
}
public static StaticSingleton getInstance(){
return SingletonHolder.instance;
}
}
複製程式碼
#####原理: 在這個實現中,單例模式使用內部類來維護單例的實力,當StaticSingleton被載入時,其內部類並不會被初始化,故可以確保當StaticSingleton類被JVM載入時,不會初始化單例類,而當getInstance()方法被呼叫時,才會載入SingletonHolder,從而初始化instance。同時,由於例項的建立是在類載入時完成,故天生對多執行緒友好,getInstance()方法也不需要使用同步關鍵字。因此,這種實現方式同時兼備以上兩種實現優點。
github
https://github.com/zyl409214686/DesignPatterns