建造者模式
建造者模式
建造者模式(Builder Pattern)是一种创建型设计模式,它允许使用多个简单的对象一步一步构建一个复杂的对象。建造者模式将一个复杂对象的构造过程与它的表示分离,使得同样的构建过程可以创建不同的表示。
建造者模式的特点
- 分离复杂对象的构建和表示:可以使用相同的构建过程创建不同的对象表示。
- 可扩展性:可以通过创建新的建造者类来构建新的表示。
- 细粒度控制:构造过程是分步骤进行的,可以对构造过程的各个步骤进行细粒度控制。
建造者模式的结构
- 产品(Product):最终要创建的复杂对象。
- 建造者(Builder):构造产品的抽象接口,定义创建产品各个部分的方法。
- 具体建造者(Concrete Builder):实现Builder接口,完成具体的构建步骤。
- 指挥者(Director):负责安排已有的建造者对象中的方法执行构造过程。
建造者模式的Python实现
以下是建造者模式在Python中的一个实现示例:
1. 定义产品类
class Product:
def __init__(self):
self.parts = []
def add(self, part: str):
self.parts.append(part)
def list_parts(self) -> str:
return f"Product parts: {', '.join(self.parts)}"
2. 定义建造者接口和具体建造者类
from abc import ABC, abstractmethod
class Builder(ABC):
@abstractmethod
def produce_part_a(self) -> None:
pass
@abstractmethod
def produce_part_b(self) -> None:
pass
@abstractmethod
def produce_part_c(self) -> None:
pass
class ConcreteBuilder1(Builder):
def __init__(self):
self.reset()
def reset(self) -> None:
self._product = Product()
def produce_part_a(self) -> None:
self._product.add("PartA1")
def produce_part_b(self) -> None:
self._product.add("PartB1")
def produce_part_c(self) -> None:
self._product.add("PartC1")
def get_product(self) -> Product:
product = self._product
self.reset()
return product
3. 定义指挥者类
class Director:
def __init__(self):
self._builder = None
@property
def builder(self) -> Builder:
return self._builder
@builder.setter
def builder(self, builder: Builder) -> None:
self._builder = builder
def build_minimal_viable_product(self) -> None:
self.builder.produce_part_a()
def build_full_featured_product(self) -> None:
self.builder.produce_part_a()
self.builder.produce_part_b()
self.builder.produce_part_c()
4. 客户端代码
if __name__ == "__main__":
director = Director()
builder = ConcreteBuilder1()
director.builder = builder
print("Standard basic product:")
director.build_minimal_viable_product()
print(builder.get_product().list_parts())
print("\nStandard full featured product:")
director.build_full_featured_product()
print(builder.get_product().list_parts())
print("\nCustom product:")
builder.produce_part_a()
builder.produce_part_c()
print(builder.get_product().list_parts())
运行结果
Standard basic product:
Product parts: PartA1
Standard full featured product:
Product parts: PartA1, PartB1, PartC1
Custom product:
Product parts: PartA1, PartC1
说明
- 产品(Product):最终要创建的复杂对象,这里用一个简单的列表表示产品的组成部分。
- 建造者(Builder):定义了构建产品的抽象接口,包括
produce_part_a
、produce_part_b
和produce_part_c
方法。 - 具体建造者(ConcreteBuilder1):实现了Builder接口,并实现了具体的构建步骤。
- 指挥者(Director):使用建造者接口来构造产品,控制构建过程。
通过建造者模式,可以有效地控制复杂对象的创建过程,使构造过程和表示分离,提供了灵活性和可扩展性。指挥者(Director)类可以复用构建步骤,具体建造者(ConcreteBuilder)类可以根据需求创建不同的产品表示。