通俗 Python 設計模式——建造者模式

建造者模式,是創建型模式中的第三種模式,一般的開發過程中用的比較少。所以只做簡單的介紹。

根據書上的介紹,建造者模式通常用於補充工廠模式的不足,尤其是在如下場景中:

  • 要求一個對象有不同的表現,並且希望將對象的構造與表現解耦
  • 要求在某個時間點創建對象,但在稍後的時間點再訪問

看起來是很難理解,其實最常用的一個場景就是操作資料庫的 orm。回想一下,orm 中一個很重要的概念:延遲載入,其實就是建造者模式最常見的應用。

在一開始將 orm 對象構造出來,但並不實際查詢數據,而是在用到具體數據的時候才向資料庫進行查詢。

並且會根據不同的對象,向不同的表進行查詢。

書上原作者的例子比較複雜,就不搬運了,建造者模式在日常開發中確實用的很少。真正遇到時,去查一查怎麼實現就好了。這裡給出一個書中翻譯評審者精簡後的代碼示例:

class Pizza:n def __init__(self, builder):n self.garlic = builder.garlicn self.extra_cheese = builder.extra_cheesenn def __str__(self):n garlic = yes if self.garlic else non cheese = yes if self.extra_cheese else non info = (Garlic: {}.format(garlic), Extra cheese: {}.format(cheese))n return n.join(info)nn class PizzaBuilder:n def __init__(self):n self.extra_cheese = Falsen self.garlic = Falsenn def add_garlic(self):n self.garlic = Truen return selfnn def add_extra_cheese(self):n self.extra_cheese = Truen return selfnn def build(self):n return Pizza(self)nnif __name__ == __main__:n pizza = Pizza.PizzaBuilder().add_garlic().add_extra_cheese().build()n print(pizza)n

這個代碼其實是建造者模式的一種變體,實現了鏈式調用。其實這種所謂的鏈式調用,也並不是什麼神奇的事情,只是在建造者類的每一個方法里返回其本身——return self——罷了。


推薦閱讀:

TAG:Python | 设计模式 |