單例模式(Singleton) : 是一種常用的軟體設計模式, 在它的核心結構中只包含一個被稱為單例的特殊類,
通過單例模式可以保證系統中, 應用該模式的類一個類只有一個實體, 即一個類只有一個物件實體,
目的是為了節省重復創建物件所帶來的記憶體消耗, 從而來提高效率 ,
實作核心點:
1.構造方法私有化;
2.宣告一個本類物件(靜態);
3.給外部提供一個靜態方法獲取物件實體,
| 餓漢式實作: 在類被加載后, 物件被創建, 到程式結束后釋放 , | 懶漢式實作: 在第一次呼叫getInstance方法時, 物件被創建,到程式結束后釋放, |
|
//餓漢式: 占用記憶體的時間長, 提高效率 class Singleton1{ private Singleton1(){} private static Singleton1 s = new Singleton1(); public static Singleton1 getInstance(){ return s; } public void print(){ System.out.println("測驗方法"); } } |
//懶漢式: 占用記憶體的時間短, 效率低(懶加載,延遲加載) class Singleton2{ private Singleton2(){}; private static Singleton2 s; public static Singleton2 getInstance(){ if(s==null){ s = new Singleton2(); } return s; } public void print(){
System.out.println("測驗方法2"); } } |
單例模式在實際開發中的應用:
1.在設計一些工具類的時候(通常工具類, 只有功能方法, 沒有屬性) ;
2.工具類可能會被頻繁呼叫 ,
單例懶漢式的執行緒安全問題:可以通過synchronized 關鍵字來解決多執行緒的執行緒安全問題,
|
public class Singleton { // 將自身實體化物件設定為一個屬性, 并用static修飾 // 靜態方法回傳該實體, 加synchronized關鍵字實作同步 return s; |
但在多執行緒情形下, synchronized方法通常效率低, 顯然這不是最佳的實作方案,
DCL雙檢查鎖機制(DCL: double checked locking) :單例模式的最佳實作方式, 記憶體占用率高, 效率高, 執行緒安全, 多執行緒操作原子性,
|
public class Singleton { // 構造方法私有化 // 將自身實體化物件設定為一個屬性, 并用static修飾 // 靜態方法回傳該實體 // 第一次檢查instance是否被實體化出來, 如果沒有進入if塊 return s; } |
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/134975.html
標籤:設計模式
