設計模式筆記python實現

設計模式學習

1.裝飾器模式

這個在個人筆記中有介紹python

2.工廠模式

author : liibn
time :2018-11-6
未完成,待更新設計模式

3.單例模式

保證一個對象最多隻有一個實例存在。若是在有多個建立實例的語句,只有第一次的會真正的建立實例,後面的語句會返回第一次建立的實例。
適合的場景:安全

  • 某些實例的建立很耗費系統資源。
  • 對安全性要求較高的場景,好比銀行的修改餘額業務。

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
相關文章
相關標籤/搜索