生成器模式与工厂方法模式有着相似之处,两者都属于创建型模式,并且都是将对象创建的任务交给一个单独的类去完成。
生成器模式将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创造不同的表示。生成器模式的设计类图如图所示。
生成器模式按照一个指定的过程逐步创建一个复杂的对象,它允许用户只通过指定复杂对象的类型和内容就可以创建它们,而不必知道内部的具体构建细节。生成器模式的主要思想是抽象出创建对象的步骤,使得这些步骤的不同实现可以创建对象的不同表示。通常,生成器模式被用来创建符合组合模式的产品对象。
生成器模式所包含的各组成部分意义如下。
使用生成器模式的特点如下。
from abc import ABC, abstractmethod
class Product:
def __init__(self):
self.type = self.a = self.b = None
def __str__(self):
return f"Product{self.type},a:{self.a},b:{self.b}"
class Builder(ABC):
def __init__(self):
self.product = Product()
@abstractmethod
def create_component_a(self):
pass
@abstractmethod
def create_component_b(self):
pass
def get_object(self):
return self.product
class ConcreteBuilder1(Builder):
def __init__(self):
super().__init__()
self.product.type = "1"
def create_component_a(self):
self.product.a = "1"
def create_component_b(self):
self.product.b = "1"
class ConcreteBuilder2(Builder):
def __init__(self):
super().__init__()
self.product.type = "2"
def create_component_a(self):
self.product.a = "2"
def create_component_b(self):
self.product.b = "2"
class Director:
def __init__(self):
self.builder = None
def set_builder(self, builder):
self.builder = builder
def construct(self):
self.builder.create_component_a()
self.builder.create_component_b()
class Client:
@staticmethod
def main():
director = Director()
concrete_builder = ConcreteBuilder1()
director.set_builder(concrete_builder)
director.construct()
print(concrete_builder.get_object())
concrete_builder = ConcreteBuilder2()
director.set_builder(concrete_builder)
director.construct()
print(concrete_builder.get_object())
if __name__ == '__main__':
Client.main()
本文分享自 Python机器学习算法说书人 微信公众号,前往查看
如有侵权,请联系 cloudcommunity@tencent.com 删除。
本文参与 腾讯云自媒体同步曝光计划 ,欢迎热爱写作的你一起参与!