跳转至

建造者模式

建造者模式

建造者模式(Builder Pattern)是一种创建型设计模式,它允许使用多个简单的对象一步一步构建一个复杂的对象。建造者模式将一个复杂对象的构造过程与它的表示分离,使得同样的构建过程可以创建不同的表示。

建造者模式的特点

  1. 分离复杂对象的构建和表示:可以使用相同的构建过程创建不同的对象表示。
  2. 可扩展性:可以通过创建新的建造者类来构建新的表示。
  3. 细粒度控制:构造过程是分步骤进行的,可以对构造过程的各个步骤进行细粒度控制。

建造者模式的结构

  1. 产品(Product):最终要创建的复杂对象。
  2. 建造者(Builder):构造产品的抽象接口,定义创建产品各个部分的方法。
  3. 具体建造者(Concrete Builder):实现Builder接口,完成具体的构建步骤。
  4. 指挥者(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

说明

  1. 产品(Product):最终要创建的复杂对象,这里用一个简单的列表表示产品的组成部分。
  2. 建造者(Builder):定义了构建产品的抽象接口,包括produce_part_aproduce_part_bproduce_part_c方法。
  3. 具体建造者(ConcreteBuilder1):实现了Builder接口,并实现了具体的构建步骤。
  4. 指挥者(Director):使用建造者接口来构造产品,控制构建过程。

通过建造者模式,可以有效地控制复杂对象的创建过程,使构造过程和表示分离,提供了灵活性和可扩展性。指挥者(Director)类可以复用构建步骤,具体建造者(ConcreteBuilder)类可以根据需求创建不同的产品表示。

评论