設計模式筆記python實現

2021-09-13 03:45:04 字數 1420 閱讀 6539

這個在我的筆記中有介紹

author: liibn

time:2018-11-6

未完成,待更新

保證乙個物件最多只有乙個例項存在。如果在有多個建立例項的語句,只有第一次的會真正的建立例項,後面的語句會返回第一次建立的例項。

適合的場景:

python使用裝飾器簡單的實現一下,這個沒有考慮多執行緒的情況,並不完美。

# 單例模式裝飾器

def singleton(cls):

_instance = {}

def _singleton(*args, **kargs):

if cls not in _instance:

_instance[cls] = cls(*args, **kargs)

return _instance[cls]

return _singleton

編寫測試類

@singleton

class a:

def __init__(self, x):

self.x = x

print(self.x)

測試寫好的裝飾器

# 例項化

a_one = a('one')

a_two = a('two')

a_three = a('three')

# 列印例項的位址

print(a_one, a_two, a_three, sep='\n')

# 比較三個引用是否相同

print(a_one is a_two is a_three)

輸出如下:

one

<__main__.a object at 0x000001fb17894d68>

<__main__.a object at 0x000001fb17894d68>

<__main__.a object at 0x000001fb17894d68>

true

這裡的a_one,a_two,a_three三個引用指向了同乙個例項。

如果我們不使用單例模式,那麼就會建立三個不同的例項。接下來注釋掉@singleton再次執行**,輸出如下:

one

twothree

<__main__.a object at 0x000001d772f24da0>

<__main__.a object at 0x000001d772f24eb8>

<__main__.a object at 0x000001d772f2d518>

false

python實現模式 python 設計模式實現

參見 1 工廠模式,關鍵字 介面 繼承 關聯 以私有實現 組合 比如雁群和雁的關係 依賴關係 適用於不經常向工廠方法中新增類的情況 2 工廠方法模式 參見 工廠方法相比工程模式會比較複雜,因為會涉及多個工廠類,並且不能改變事實 客戶端仍需要修改 3 策略模式 定義了不同的方式 區別 1 工廠模式 v...

設計模式 python實現 策略模式

策略模式簡單說和小時候我們玩的玩具差不多,一堆零部件通過不同的拼湊構成幾個不同的機械人。我們買了乙個機械人,同時這個機械人配了三把 三把 可以替換使用 在例項中,我們先創造乙個人,天生自帶人手 class people def init self,hand none self.name 人手 if ...

Python實現設計模式 建立類設計模式

抽象工廠是什麼 抽象工廠是為了提供乙個建立一系列相關或相互依賴物件的介面,而無需指定它們具體的類。例子我建立了乙個抽象工廠類,它的表現取決於我們選擇什麼工廠來初始化它。例子中,抽象工廠類是寵物店 petshop 它有乙個動作 show pet 用來展示動物,我們如果用貓 cat 初始化寵物店,展示時...