一分鐘了解python的建造者模式
建造者模式是一種設計模式,通常用于創(chuàng)建具有復雜屬性的對象。這種模式使我們能夠將對象的構建過程分解為多個步驟。Python是一種面向對象的編程語言,支持建造者模式。本文將使用Python代碼和示例來解釋建造者模式。
?假設我們要建造一幢房子,這個過程需要多個步驟,例如建造基礎、墻壁、屋頂?shù)?。在建造的過程中,每個步驟都需要考慮不同的屬性,例如基礎的深度、墻壁的高度和厚度、屋頂?shù)男螤畹取J褂媒ㄔ煺吣J?,我們將這些步驟和屬性分解為多個對象,每個對象都負責特定的任務。
?我們首先定義一個“建造者”接口,該接口包含所有建造過程的方法。所有建造者對象必須實現(xiàn)這個接口。
class Builder:
? ? def build_foundation(self):
? ? ? ? pass
? ? ?def build_walls(self):
? ? ? ? pass
? ? ?def build_roof(self):
? ? ? ? pass
接下來,我們定義一個“房子”類,該類包含所有必需的房屋屬性。我們還需要一個“導演”類,它根據(jù)用戶的需求指導建造者創(chuàng)建房屋對象。
class House:
? ? def __init__(self):
? ? ? ? self.foundation = None
? ? ? ? self.walls = None
? ? ? ? self.roof = None
? ? ?def __str__(self):
? ? ? ? return f'House with {self.foundation}, {self.walls} and {self.roof}'
?class Director:
? ? def __init__(self):
? ? ? ? self.builder = None
? ? ?def construct_house(self):
? ? ? ? self.builder.build_foundation()
? ? ? ? self.builder.build_walls()
? ? ? ? self.builder.build_roof()
? ? ?def get_house(self):
? ? ? ? return self.builder.house
現(xiàn)在我們可以創(chuàng)建多個建造者類,每個類都實現(xiàn)了建造者接口。它們將負責實現(xiàn)特定的建造過程和屬性:
class WoodenBuilder(Builder):
? ? def __init__(self):
? ? ? ? self.house = House()
? ? ?def build_foundation(self):
? ? ? ? self.house.foundation = 'Wooden foundation'
? ? ?def build_walls(self):
? ? ? ? self.house.walls = 'Wooden walls'
? ? ?def build_roof(self):
? ? ? ? self.house.roof = 'Wooden roof'
?class BrickBuilder(Builder):
? ? def __init__(self):
? ? ? ? self.house = House()
? ? ?def build_foundation(self):
? ? ? ? self.house.foundation = 'Brick foundation'
? ? ?def build_walls(self):
? ? ? ? self.house.walls = 'Brick walls'
? ? ?def build_roof(self):
? ? ? ? self.house.roof = 'Brick roof'
我們可以像下面這樣使用這些建造者:
director = Director()
director.builder = WoodenBuilder()
director.construct_house()
house = director.get_house()
print(house)
?director.builder = BrickBuilder()
director.construct_house()
house = director.get_house()
print(house)
輸出結果如下:
House with Wooden foundation, Wooden walls and Wooden roof
House with Brick foundation, Brick walls and Brick roof
在這個示例中,我們創(chuàng)建了兩個不同的建造者,分別用于創(chuàng)建木制房屋和磚房屋。導演對象創(chuàng)建并指導建造者對象完成創(chuàng)建過程,最終返回一個完整的房子對象。
?建造者模式是一種非常有用的設計模式,在創(chuàng)建具有多個屬性的對象時非常適用。與其他設計模式一樣,建造者模式可以大大簡化復雜的建造過程,并提供更好的靈活性和可維護性。