34 單例模式

2021-09-26 13:31:40 字數 1355 閱讀 1501

單例模式

python的單例模式就是乙個類的例項只能自始自終自能建立一次。應用場景比如說資料庫的連線池。

單例設計模式是怎麼來的?

在物件導向的程式設計中,當業務併發量非常大時,那麼就會出現重複建立相同的物件,每建立乙個物件就會開闢一塊記憶體空間,而這些物件其實是一模一樣的,那麼有沒有辦法使用得記憶體物件只建立一次,然後再隨處使用呢?單例模式就是為了解決這個問題而產生的。

實現方式

1、建立乙個類靜態字段(類變數)__instance

2、建立乙個靜態函式,通過函式的邏輯判斷 __instance是否已存在,如不存在就將物件值賦於__instance,即__instance = 類(),否則直接返回__instance,也即建立的物件都是一樣的

3、使用單例模式建立物件時直接通過類呼叫靜態函式建立即可

普通模式

class a:

pass

a = a()

print(id(a))

b = a()

print(id(b))

程式改進

class a(object):

__instance = none

def __new__(cls):

if cls.__instance == none:

cls.__instance = object.__new__(cls)

return cls.__instance

else:

return cls.__instance

a = a()

print(id(a))

b = a()

print(id(b))

class a(object):

__instance = none

definit(self,name,male):

self.name = name

self.name = male

@staticmethod

def create_obj():

if not a.__instance:

a.__instance = a(『ben』,『boy』)

return a.__instance

else:

return a.__instance

#單例模式例項化多個物件

obj1 = a.create_obj()

obj2 = a.create_obj()

obj3 = a.create_obj()

##列印記憶體位址,可以看到記憶體位址都是一樣的

print id(obj1),id(obj2),id(obj3)

更多單例模式

單例模式 單例模式

餓漢式 急切例項化 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...