這個在個人筆記中有介紹python
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 two three <__main__.A object at 0x000001D772F24DA0> <__main__.A object at 0x000001D772F24EB8> <__main__.A object at 0x000001D772F2D518> False