設計模式複習筆記 (7)建立型模式 單例模式

2021-07-23 15:24:02 字數 1027 閱讀 8818

模式定義

模式動機

模式結構

模式分析

模式優點

提供了對唯一例項的受控訪問。因為單例類封裝了它的唯一例項,所以它可以嚴格控制客戶怎樣以及何時訪問它,並為設計及開發團隊提供了共享的機制。

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

允許可變數目的例項。我們可以基於單例模式進行擴充套件,使用與單例控制相似的方法來獲得指定個數的物件例項。

模式缺點

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

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

濫用單例將帶來一些負面問題,如為了節省資源將資料庫連線池物件設計為單例類,可能會導致共享連線池物件的程式過多而出現連線池溢位。

模式適用環境

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

餓漢式單例與懶漢式單例模擬較

餓漢式單例類在自己被載入時就將自己例項化。單從資源利用效率角度來講,這個比懶漢式單例類稍差些。從速度和反應時間角度來講,則比懶漢式單例類稍好些。

懶漢式單例類在例項化時,必須處理好在多個執行緒同時首次引用此類時的訪問限制問題,特別是當單例類作為資源控制器,在例項化時必然涉及資源初始化,而資源初始化很有可能耗費大量時間,這意味著出現多執行緒同時首次引用此類的機率變得較大,需要通過同步化機制進行控制。

public static synchronized singleton get instance()

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

類載入時建立物件 常量 class eagersingleton public static eagersingleton getinstance 延遲載入 假如在某一瞬間 執行緒a 和 執行緒b 都在呼叫getinstance 方法,此時instance物件為null值,均能通過instance ...

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

單例模式 singletonparrten 保證乙個類只有乙個例項,並提供乙個訪問它的全域性訪問點 建立單例模式需要三方面操作 1.建立乙個物件 2.定義乙個私有構造方法 禁止外部類對其進行例項化 3.提供乙個對外訪問的方法 單例模式可以通過懶漢式和餓漢式來實現。懶漢式 執行緒不安全 懶漢式 單例模...

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

優點 缺點頻繁使用 建立與銷毀 資源占用較多,例項化消耗大且耗時長,通過共享單例,加快物件的訪問速度 類要求只生成乙個例項的場景 需要單一控制邏輯的操作。具體如 多執行緒執行緒池 網路連線池 訪問資料庫或者檔案的物件等等。結構主要角色 實現 懶漢式實現 實現特點 該模式的特點是類載入時沒有生成單例,...