單例設計模式
設計模式:
設計模式是前人工作的總結和提煉,通常被人們廣泛流傳的設計模式都是針對某一特定問題的成熟解決方案
使用設計模式是為了可重用**、讓**更容易被他讓理解、保證**的可靠性
單例設計模式:
目的--讓類建立的物件,在系統中只有唯一的乙個例項
每一次執行類名()返回的物件,記憶體位址都是相同的
__new__方法
使用類名()建立物件的時候,python直譯器首先會自動呼叫__new__方法為物件分配空間,傳遞給__init__
__new__是乙個由object基類提供的內建靜態方法,主要作用有兩個:
1.在記憶體中為物件分配空間
2.返回物件的引用
python的直譯器獲得物件的引用後,將引用作為第乙個引數,傳遞給__init__方法
重寫__new__方法 --固定格式
重寫__new__方法之後一定要return super().__new__(cls)
否則python的直譯器得不到分配空間的物件引用,就不會呼叫物件的初始化方法
__new__是乙個靜態方法,在呼叫時需要主動傳遞cls引數
由於__new__方法繼承自object,所以直接呼叫父類的__new__方法並且返回
python中的單例
單例--讓類建立的物件,在系統中有且只有唯一乙個例項
1.定義乙個類屬性,初始值是none,用於記錄單例物件的引用
2.重寫__new__方法
3.如果類屬性is none,呼叫父類方法分配空間,並在類屬性中記錄結果,
如果類屬性不是none就說明有已經有記憶體位址了 不再分配空間
4.返回類屬性中記錄的物件引用
只執行一次初始化工作
在每次使用類名()建立物件時,python的直譯器都會自動呼叫兩個方法
1.__new__分配空間
2.__init__物件初始化
在上一小節對__new__方法改造之後,每次都會得到第一次被建立物件的引用
但是 初始化方法還會被再次呼叫
讓初始化動作只被執行一次
解決辦法:
1.定義乙個類屬性init_flag標記是否執行過初始化動作,初始值為false
2.在__init__方法中,判斷init_flag 如果為false就執行初始化動作
3.然後將init__flag設定為true
4.這樣,再次自動呼叫__init__方法時,初始化動作就不會被再次執行了
模式 單例模式8種寫法
單例模式是最常用到的設計模式之一,熟悉設計模式的朋友對單例模式都不會陌生。一般介紹單例模式的書籍都會提到餓漢式和懶漢式這兩種實現方式。但是除了這兩種方式,本文還會介紹其他幾種實現單例的方式,讓我們來一起看看吧。單例模式是一種常用的軟體設計模式,其定義是單例物件的類只能允許乙個例項存在。許多時候整個系...
8 self parent 單例模式
self和parent的用法 self 本類,自身 parent 父類 使用場景 用法 使用規範 單例模式 單例模式就是乙個類不能使用new關鍵字進行例項化物件,通過呼叫類的靜態方法建立乙個例項物件,並且只能建立乙個 符合這個條件的,都是單例模式,單例單例,就是只有乙個例項。逢面必問!單例模式 cl...
8種單例設計模式
單例模式有八種方式 餓漢式 靜態常量 餓漢式 靜態 塊 懶漢式 執行緒不安全 懶漢式 執行緒安全,同步方法 懶漢式 執行緒安全,同步 塊 雙重檢查 靜態內部類 列舉 餓漢式 靜態變數 class singleton 2.本類內部建立物件例項 private final static singleto...