單例模式(Singleton Pattern)。

2021-09-30 14:17:20 字數 1341 閱讀 8575

定義:

確保某乙個類只有乙個例項,而且自行例項化並向整個系統提供這個例項。

通用**:

惡漢式單例

public class singleton

// 通過該方法獲得例項物件

public static singleton getsingleton()

// 類中其他方法,盡量是static

public static void dosomething(){}

}

優點:

缺點:使用場景:

注意事項:

懶漢式單例:

public class singleton 

// 通過該方法獲得例項物件

public static synchronized singleton getsingleton()

return singleton;

}}

單例模式的擴充套件(有上限的多例模式)

固定數量的黃帝類

public class emperor 

}// 世俗和道德約束你,目的就是不產生第二個皇帝

private emperor(){}

// 傳入皇帝名稱,建立乙個皇帝物件

private emperor(string name)

// 隨機獲得乙個皇帝物件

public static emperor getinstance()

// 皇帝發話了

public static void say()

}

在emperor中使用了兩個arraylist分別儲存例項和例項變數。當然,如果考慮到執行緒安全問題可以使用vector來代替。

臣子參拜皇帝的過程

public class minister 

}}

注重需要產生固定數量的物件的模式就叫做有上限的多例模式,它是單例模式的一種擴充套件,採用有上限的多例模式,我們可以在設計時決定在記憶體中有多少個例項,方便系統進行擴充套件修正單例可能存在的效能問題,提供系統的響應速度。例如讀取檔案,我們可以在系統啟動時完成初始化工作,在記憶體中啟動固定數量的reader例項,然後在需要讀取檔案時就可以快速響應。

最佳實踐:

單例模式時23個模式中比較簡單的模式,應用也非常廣泛,如在spring中,每個bean預設就是單例模式的,這樣做的優點是spring容器可以管理這些bean的生命期,決定什麼時候建立,什麼時候銷毀,銷毀的時候如何處理,等等。如果採用非單例模式(propertype型別),則bean初始化後的管理交由j2ee容器,spring容器不再跟蹤管理bean的生命週期。

單例模式 單例模式

餓漢式 急切例項化 public class eagersingleton 2.宣告靜態成員變數並賦初始值 類初始化的時候靜態變數就被載入,因此叫做餓漢式 public static eagersingleton eagersingleton new eagersingleton 3.對外暴露公共的...

單例 單例模式

簡單的實現乙個單例 instancetype sharedinstance return instance 真正的單例模式 myclass sharedinstance return instance id allocwithzone nszone zone return nil id copywi...

單例模式 懶漢式單例模式

單例模式有餓漢時模式和懶漢式 單例模式也就是說同一類只返回乙個物件供外部類使用 懶漢式即延遲初始化單例。在多執行緒環境下,簡單的懶漢式會有執行緒安全。懶漢式單例模式解決線性安全問題如下 1 使用雙重檢查鎖機制解決執行緒安全問題。2 單例模式還有更好的解決方案,即使用靜態類方式。懶漢式單例模式典型 p...