一分钟了解python的建造者模式|世界滚动
建造者模式是一种设计模式,通常用于创建具有复杂属性的对象。这种模式使我们能够将对象的构建过程分解为多个步骤。Python是一种面向对象的编程语言,支持建造者模式。本文将使用Python代码和示例来解释建造者模式。
假设我们要建造一幢房子,这个过程需要多个步骤,例如建造基础、墙壁、屋顶等。在建造的过程中,每个步骤都需要考虑不同的属性,例如基础的深度、墙壁的高度和厚度、屋顶的形状等。使用建造者模式,我们将这些步骤和属性分解为多个对象,每个对象都负责特定的任务。
我们首先定义一个“建造者”接口,该接口包含所有建造过程的方法。所有建造者对象必须实现这个接口。
(资料图)
class Builder:
def build_foundation(self):
pass
def build_walls(self):
pass
def build_roof(self):
pass
接下来,我们定义一个“房子”类,该类包含所有必需的房屋属性。我们还需要一个“导演”类,它根据用户的需求指导建造者创建房屋对象。
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
现在我们可以创建多个建造者类,每个类都实现了建造者接口。它们将负责实现特定的建造过程和属性:
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
在这个示例中,我们创建了两个不同的建造者,分别用于创建木制房屋和砖房屋。导演对象创建并指导建造者对象完成创建过程,最终返回一个完整的房子对象。
建造者模式是一种非常有用的设计模式,在创建具有多个属性的对象时非常适用。与其他设计模式一样,建造者模式可以大大简化复杂的建造过程,并提供更好的灵活性和可维护性。