這個在我的筆記中有介紹
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
再次執行**,輸出如下:
onetwothree
<__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 初始化寵物店,展示時...