建造者模式

简介: 建造者模式将复杂对象的构建过程与表示分离,通过指挥者调用具体建造者逐步创建产品,适用于构建步骤多、需不同表示的场景,提升代码可读性与扩展性,但会增加类数量,适合复杂对象构建。

建造者模式(Builder Pattern)是一种创建型设计模式,它通过将一个复杂对象的构建过程与其表示分离,使得同样的构建过程可以创建不同的表示。这种模式常用于对象的构建过程复杂、需要多个步骤,或者需要使用不同的表示时。

  1. 建造者模式的结构
    建造者模式通常包含以下几个角色:

产品(Product):表示被构建的复杂对象。
建造者接口(Builder):定义了构建产品所需的各个步骤。
具体建造者(Concrete Builder):实现建造者接口,构建并返回产品的实例。
指挥者(Director):负责管理建造者的构建过程,调用建造器的方法以生成产品。

  1. 建造者模式的 UML 图
    plaintext
    +-------------------+
    |     Director      |
    +-------------------+
    | + construct()     |
    +-------------------+
            |
            |
    +-------+-------+
    |               |
    
    +---------------+ +---------------+
    | Builder | | ConcreteBuilder|
    +---------------+ +---------------+
    | + build_part()| | + build_part()|
    | + get_result()| | + get_result() |
    +---------------+ +---------------+
                   |
                   v
             +---------------+
             |     Product    |
             +---------------+
    
  2. 建造者模式的实现
    以下是一个 Python 中建造者模式的简单示例:

3.1 定义产品
python
class Product:
def init(self):
self.parts = []

def add(self, part: str) -> None:
    self.parts.append(part)

def show(self) -> None:
    print(f"Product parts: {', '.join(self.parts)}")

3.2 定义建造者接口
python
from abc import ABC, abstractmethod

class Builder(ABC):
@abstractmethod
def build_part_a(self) -> None:
pass

@abstractmethod
def build_part_b(self) -> None:
    pass

@abstractmethod
def get_result(self) -> Product:
    pass

3.3 实现具体建造者
python
class ConcreteBuilder(Builder):
def init(self):
self.product = Product()

def build_part_a(self) -> None:
    self.product.add("Part A")

def build_part_b(self) -> None:
    self.product.add("Part B")

def get_result(self) -> Product:
    return self.product

3.4 定义指挥者
python
class Director:
def init(self, builder: Builder) -> None:
self.builder = builder

def construct(self) -> None:
    self.builder.build_part_a()
    self.builder.build_part_b()

3.5 使用建造者模式
python
if name == "main":
builder = ConcreteBuilder()
director = Director(builder)

director.construct()
product = builder.get_result()

product.show()  # 输出: Product parts: Part A, Part B
  1. 建造者模式的优缺点
    优点
    封装复杂性:将构建过程与表示分开,使得构造复杂对象的过程更加清晰和可控。
    灵活性:可以根据不同的需求和环境来构建不同的产品。
    步骤化构建:可以在不同的步骤中改变构建的顺序或内容,提供了良好的灵活性和可扩展性。
    缺点
    类的数量增加:每个具体建造者都需要一个类,这可能会导致类的数量增加。
    复杂性:对于简单的对象构建,使用建造者模式可能显得过于复杂。
  2. 何时使用建造者模式
    当一个对象的构建过程复杂,需要多个步骤时。
    当构建过程应该允许不同的表示时。
    当构建的算法应该独立于使用的组件时。
  3. 总结
    建造者模式是一种有效的设计模式,用于处理复杂对象的构建。它通过将对象的构建逻辑与表示分离,提高了代码的可维护性和可读性。在实际应用中,合理运用建造者模式能够帮助开发者更好地管理复杂对象的创建过程。
相关文章
|
13天前
|
数据采集 人工智能 安全
|
8天前
|
编解码 人工智能 自然语言处理
⚽阿里云百炼通义万相 2.6 视频生成玩法手册
通义万相Wan 2.6是全球首个支持角色扮演的AI视频生成模型,可基于参考视频形象与音色生成多角色合拍、多镜头叙事的15秒长视频,实现声画同步、智能分镜,适用于影视创作、营销展示等场景。
644 4
|
8天前
|
机器学习/深度学习 人工智能 前端开发
构建AI智能体:七十、小树成林,聚沙成塔:随机森林与大模型的协同进化
随机森林是一种基于决策树的集成学习算法,通过构建多棵决策树并结合它们的预测结果来提高准确性和稳定性。其核心思想包括两个随机性:Bootstrap采样(每棵树使用不同的训练子集)和特征随机选择(每棵树分裂时只考虑部分特征)。这种方法能有效处理大规模高维数据,避免过拟合,并评估特征重要性。随机森林的超参数如树的数量、最大深度等可通过网格搜索优化。该算法兼具强大预测能力和工程化优势,是机器学习中的常用基础模型。
348 164
|
7天前
|
机器学习/深度学习 自然语言处理 机器人
阿里云百炼大模型赋能|打造企业级电话智能体与智能呼叫中心完整方案
畅信达基于阿里云百炼大模型推出MVB2000V5智能呼叫中心方案,融合LLM与MRCP+WebSocket技术,实现语音识别率超95%、低延迟交互。通过电话智能体与座席助手协同,自动化处理80%咨询,降本增效显著,适配金融、电商、医疗等多行业场景。
359 155

热门文章

最新文章