確保物件的唯一性——單例模式 (五)

Liuwei-Sunny發表於2012-04-02

3.6 單例模式總結

       單例模式作為一種目標明確、結構簡單、理解容易的設計模式,在軟體開發中使用頻率相當高,在很多應用軟體和框架中都得以廣泛應用。

 

1.主要優點

       單例模式的主要優點如下:

       (1) 單例模式提供了對唯一例項的受控訪問。因為單例類封裝了它的唯一例項,所以它可以嚴格控制客戶怎樣以及何時訪問它。

       (2) 由於在系統記憶體中只存在一個物件,因此可以節約系統資源,對於一些需要頻繁建立和銷燬的物件單例模式無疑可以提高系統的效能。

       (3) 允許可變數目的例項。基於單例模式我們可以進行擴充套件,使用與單例控制相似的方法來獲得指定個數的物件例項,既節省系統資源,又解決了單例單例物件共享過多有損效能的問題。

 

2.主要缺點

       單例模式的主要缺點如下:

       (1) 由於單例模式中沒有抽象層,因此單例類的擴充套件有很大的困難。

       (2) 單例類的職責過重,在一定程度上違背了“單一職責原則”。因為單例類既充當了工廠角色,提供了工廠方法,同時又充當了產品角色,包含一些業務方法,將產品的建立和產品的本身的功能融合到一起。

       (3) 現在很多物件導向語言(JavaC#)的執行環境都提供了自動垃圾回收的技術,因此,如果例項化的共享物件長時間不被利用,系統會認為它是垃圾,會自動銷燬並回收資源,下次利用時又將重新例項化,這將導致共享的單例物件狀態的丟失。

 

3.適用場景

       在以下情況下可以考慮使用單例模式:

       (1) 系統只需要一個例項物件,如系統要求提供一個唯一的序列號生成器或資源管理器,或者需要考慮資源消耗太大而只允許建立一個物件。

       (2) 客戶呼叫類的單個例項只允許使用一個公共訪問點,除了該公共訪問點,不能通過其他途徑訪問該例項。

 

思考

如何對單例模式進行改造,使得系統中某個類的物件可以存在有限多個,例如兩例或三例?【注:改造之後的類可稱之為多例類。】

【作者:劉偉  http://blog.csdn.net/lovelion

相關文章