python設計模式之一 單例模式

2022-03-08 15:55:30 字數 1550 閱讀 5722

在物件導向的世界裡,物件是對客觀事物的抽象,類是對物件的抽象。它們之間的關係是,物件是類的例項,類是物件的模板。

這段文字表述起來費勁,理解起來也費勁,還是講生活中的例子吧。比如說「大河」,一聯想到這個詞,不同的人腦海中的印象是不一樣的,有的是「大漠孤煙直,長河落日圓」,有的是「春江潮水連海平,海上明月共潮生」,有的是「星垂平野闊,月湧大江流」。在這個例子中,大河可以認為是乙個類,大河具有所有河流的共性特徵,如有河堤,有長度,會流向大海等特性,而幾句詩中的「石羊河」、「瀏陽河」、「長江」等分別是大河的乙個例項化物件。

在大河的例子中,乙個大河類可以有多個不同的例項。可是,我們今天的主角-單例模式,應用單例模式的類卻只能有乙個例項。

比如我們常見的作業系統的任務管理器,它就是乙個單例模式的實現。

單例模式(singleton pattern):確保乙個類只有乙個例項,而且自行例項化並向整個系統提供這個例項。

這個定義有三個要點

某個類只能有乙個例項

類應當自行建立這個例項

它必須向整個系統提供這個例項

角色:單例本身

優點應用單例模式例項化類在應用程式域中只存在乙個物件,滿足業務需要的同時,無疑也能降低記憶體消耗,提高計算機效能。

由於例項化的過程由類本身完成,可方便地選擇例項時機。

缺點由於單例模式通常為單一類且不允許繼承,所以它的擴充套件能力受限。

由於上一點的原因,單例類通常承載了過多的職能,違反了單一職責原則。

lilei和hanmeimei經過多年的愛情長跑,終於邁入婚姻的殿堂。婚後不久,就有了愛情的結晶,小朋友名叫littlemango。

class singletonbase(type):

def __init__(self,*args,**kwargs):

self._instance=none

super().__init__(*args,**kwargs)

def __call__(self,*args,**kwargs):

if self._instance is none:

self._instance=super(singletonbase,self).__call__(*args,**kwargs)

return self._instance

class littlemango(metaclass=singletonbase):

def show_my_age(self):

print('i\'m 5 years old')

if __name__ == "__main__":

s1=littlemango()

s2=littlemango()

print('s1:',id(s1))

print('s2:',id(s2))

s1: 800311678008

s2: 800311678008

通過上面的例項,我們看見s1和s2引用了同乙個記憶體位址,這樣,我們就實現了單例模式。在專案應用中,如果把singletonbase封裝起來,需要實現單例模式的地方繼承此類即可。

設計模式之一單例模式

單例模式就是類別只有乙個例項,每次在必得類呼叫這個類的例項,都是同乙個例項。通過單例模式可以保證系統中乙個類只有乙個例項而且該例項易於外界訪問,從而方便對例項個數的控制並節約系統資源。如果希望在系統中某個類的物件只能存在乙個,單例模式是最好的解決方案。如印表機 顯示卡等等這些系統資源。如果做andr...

設計模式之一 單例模式

單例模式,是一種常用的軟體設計模式。在它的核心結構中只包含乙個被稱為單例的特殊類。通過單例模式可以保證系統中乙個類只有乙個例項。即乙個類只有乙個物件例項。定義乙個單例類,使用類的私有指標變數指向類的唯一例項,並且使用乙個共有的靜態方法獲取該例項。懶漢模式 即第一次呼叫該類的例項的時候才產生乙個新的該...

設計模式之一 單例模式

一.什麼是單例模式 某個類同時保留乙個物件,不希望有更多物件,此時,我們則應考慮單例模式的設計。二.單例模式的特點 1.單例模式只能有乙個例項。2.單例類必須建立自己的唯一例項。3.單例類必須向其他物件提供這一例項。三.單例模式vs靜態類 在知道了什麼是單例模式後,我想你一定會想到靜態類,既然只使用...