📜  设计模式-生成器模式(1)

📅  最后修改于: 2023-12-03 15:41:45.191000             🧑  作者: Mango

生成器模式

生成器模式是一种创建型设计模式,它允许逐步构造复杂对象。它的主要思想是将构造复杂对象的过程分解成多个步骤,然后逐一实现这些步骤以完成构造。这种方法可以将构造与表示分离,使构造过程更加灵活和可定制。

适用场景
  • 当需要创建一个复杂对象时,希望将其构造过程拆分为多个步骤。
  • 当希望在不同的构造过程中使用相同的构件集合,但每次构造的结果可能有所不同时。
  • 当需要对构造过程进行控制或者限制时。
实现方法

生成器模式通常包括以下几个角色:

  • Director(指挥者):负责指导生成器的构建过程,按照一定的顺序和规则来调用生成器的各个方法,最终构造出复杂对象。
  • Builder(生成器):定义了构造复杂对象所需要的各个步骤,以及每个步骤所需的参数和返回值。
  • ConcreteBuilder(具体生成器):实现了生成器接口的各个方法,用于实现复杂对象的各个部分的构建。
  • Product(产品):表示最终构建出的复杂对象,即“产品”。

整个生成器模式的流程如下所示:

class Director: 
    '''指挥者'''

    def __init__(self, builder):
        self._builder = builder

    def construct(self):
        self._builder.build_part_a()
        self._builder.build_part_b()
        self._builder.build_part_c()

class Builder:
    '''生成器接口'''

    def build_part_a(self):
        pass

    def build_part_b(self):
        pass

    def build_part_c(self):
        pass

    def get_result(self):
        pass

class ConcreteBuilder(Builder):
    '''具体生成器'''

    def __init__(self):
        self._product = Product()

    def build_part_a(self):
        self._product.add('Part A')

    def build_part_b(self):
        self._product.add('Part B')

    def build_part_c(self):
        self._product.add('Part C')

    def get_result(self):
        return self._product

class Product:
    '''产品'''

    def __init__(self):
        self.parts = []

    def add(self, part):
        self.parts.append(part)

    def __str__(self):
        return str(self.parts)

在这个例子中,我们定义了一个Director类,它负责指挥生成器的构建过程。Director类的construct方法按照特定的顺序和规则来调用生成器的各个方法,最终构造出复杂对象。我们还定义了一个Builder接口,该接口定义了构造复杂对象所需要的各个步骤,以及每个步骤所需的参数和返回值。ConcreteBuilder类实现了Builder接口,并用于实现复杂对象的各个部分的构建。Product类表示最终构建出的复杂对象,即“产品”。

优缺点
优点
  • 构建复杂对象的过程被分解为多个步骤,每个步骤可以由不同的生成器来实现,从而方便了复杂对象的构建和定制。
  • 构造与表示分离,将构造过程与最终产品的表示分离开来,可以灵活地控制构造过程,并对构造过程进行优化和改进,同时也可以方便地更改产品的表示方式。
  • 可以使用相同的构件集合来构造不同的产品。
缺点
  • 由于生成器模式需要定义很多类(包括生成器接口、具体生成器、指挥者等),所以类的数量会比较多,增加了系统的复杂度。
  • 生成器模式适用于构造复杂对象,但如果需要构造的对象比较简单,则使用生成器模式反而会使系统变得更加复杂。
总结

生成器模式是一种创建型设计模式,它允许逐步构造复杂对象。它的主要思想是将构造复杂对象的过程分解成多个步骤,然后逐一实现这些步骤以完成构造。这种方法可以将构造与表示分离,使构造过程更加灵活和可定制。虽然生成器模式需要定义很多类,但它的优点也是非常明显的,特别是在构造复杂对象时,使用生成器模式可以使构造过程更加灵活和可控。