python設計模式之單例模式(一)

2021-09-19 18:34:48 字數 1965 閱讀 1071

單例設計模式即確保類有且只有乙個特定型別的物件,並提供全域性訪問點。一般我們運算元據庫的時候為了避免統一資源產生互相衝突,建立單例模式可以維護資料的唯一性。

確保類有且只有乙個物件被建立。

為物件提供乙個訪問點,以使程式可以全域性訪問物件。

控制共享資源的並行訪問。

下面是單例模式的uml圖。(注:uml-unified model language 統一建模語言,又稱標準建模語言。是用來對軟體密集系統進行視覺化建模的一種語)

網上找了乙個c#的例子(其中考慮到多執行緒的問題)可以了解下,下面我們主要介紹python的單例模式的使用。

///

/// 單例模式的實現

///public

class

singleton

////// 定義公有方法提供乙個全域性訪問點,同時你也可以定義公有屬性來提供全域性訪問點

//////

public

static singleton getinstance()}}

return uniqueinstance;}}

在python中的使用方法就要變通了,因為python無法穿件私有的建構函式,所以下面我們來看看python是如何實現的。

我之前測試的時候用了__inst作為檢測結果就是,每次建立物件的時候都會生成乙個新的例項,可以使用乙個下劃線開頭的詞作為屬性 不過一般都用instance或者縮寫inst.

物件s1建立的時候 沒有inst屬性所以 程式給它分配了乙個位址,當建立s2的時候inst已經存在所以直接把物件的位址指向了s1的了。

一般我們在匯入模組的時候,無意中會建立乙個物件,但是我們有的時候根不不用他,(比如我們寫乙個檔案 裡面是selenium操作頁面的 我們一般會在__init__中定義self.driver=webdriver.chrome(),我們在呼叫這個類的時候,就會自動彈出谷歌模擬器。)

懶漢式模式就是解決這種問題的 讓我們在實際需要的時候才建立物件,所以懶漢式是比較節省資源的一種方式。

class

singleton:

__inst=none

def__init__

(self):

ifnot singleton.__inst:

print("開始呼叫init")

else:

print("__inst已經建立",self.getinstance())

@classmethod

defgetinstance

(cls):

ifnot cls.__inst:

cls.__inst=singleton()

return cls.__inst 

s= singleton()#只是呼叫了init方法,但是沒有新的物件建立

singleton.getinstance()

s1= singleton()

s2= singleton()

s3= singleton()

後續。。。

Python設計模式之單例模式

站 物件 印表機 物件 使用類名 建立物件時,python 的直譯器首先 會 呼叫 new 方法為物件 分配空間。new 是乙個 由object基類提供的內建的靜態方法,主要作用有兩個 python 的直譯器獲得物件的 引用 後,將引用作為 第乙個引數,傳遞給 init 方法。重寫 new 方法 的...

python設計模式之單例模式

單例模式是一種建立型設計模式,它確保乙個類有且只有乙個特定型別的物件,並提供全域性訪問點。其意圖為 簡單理解 單例即為單個例項,也就是每次例項化建立物件時獲得的都是同乙個物件,當然同乙個物件的屬性都是相同的,方法也是相同的,位址也是相同的,這樣給我們帶來的好處就是可以避免消耗過多的記憶體或cpu資源...

Python設計模式之單例模式

單例模式屬於建立型模式,它提供了一種建立物件的最佳方式。這種模式涉及到乙個單一的類,該類負責建立自己的物件,同時確保只有單個物件被建立。這個類提供了一種訪問其唯一的物件的方式,可以直接訪問,不需要例項化該類的物件。單例模式是獲取全域性狀態的一種相當好的方法,但這也是對於單例模式的主要批評之處,因為在...