欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 新闻 > 焦点 > 设计模式-建造者模式

设计模式-建造者模式

2025/1/4 20:43:52 来源:https://blog.csdn.net/weixin_42238129/article/details/144844376  浏览:    关键词:设计模式-建造者模式

在面向对象的设计中,建造者模式(Builder Pattern) 是一种常用的设计模式,它属于创建型模式,旨在将复杂对象的创建与其表示分离。通过该模式,我们可以一步一步地构造一个复杂的对象,避免构造函数的复杂化,同时提高代码的可维护性和可扩展性。

在这篇文章中,我们将深入了解建造者模式的概念、结构、实现方式以及应用场景,帮助你更好地理解这一设计模式。

1. 什么是建造者模式?

建造者模式用于构建一个复杂的对象。它的主要思想是将对象的构建过程与其表示分离,允许通过相同的构建过程创建不同的表示。

适用场景:

  • 当你需要创建的对象包含多个组成部分,而这些部分之间的组合顺序或者选项组合比较复杂时,可以考虑使用建造者模式。
  • 当一个对象的创建过程中,可能有很多可选的参数或者配置选项时,也非常适合采用建造者模式。

2. 建造者模式的结构

建造者模式通常涉及以下几个角色:

1. 产品(Product)

  • 这是最终构建出来的复杂对象。在建造者模式中,产品通常由多个部件组成。

2. 建造者(Builder)

  • 负责定义创建产品的各个部分,且通过接口声明构建步骤。建造者通常是一个抽象类或接口,定义了创建各个部件的方法。

3. 具体建造者(ConcreteBuilder)

  • 实现建造者接口,负责实现具体的创建步骤,逐步构建复杂对象。每个具体建造者负责构建不同的产品或具有不同配置的产品。

4. 指挥者(Director)

  • 负责指导构建过程。它会调用建造者的各个方法,按照某种顺序来完成产品的创建。

5. 客户端(Client)

  • 调用指挥者来构建产品,最终得到一个构建好的复杂对象。

UML 类图:

图片来源

3. 建造者模式的实现

我们来看一个具体的例子,假设我们需要构建一个计算机对象,该计算机有多个部件,如:CPU、内存、硬盘等,并且每个部件有不同的配置。

3.1 定义产品(Product)

class Computer: def __init__(self, cpu, ram, hard_disk): self.cpu = cpu self.ram = ram self.hard_disk = hard_disk def __str__(self): return f"Computer [CPU={self.cpu}, RAM={self.ram}, Hard Disk={self.hard_disk}]"

3.2 定义建造者(Builder)

from abc import ABC, abstractmethodclass ComputerBuilder(ABC):@abstractmethoddef build_cpu(self):pass@abstractmethoddef build_ram(self):pass@abstractmethoddef build_hard_disk(self):pass@abstractmethoddef get_computer(self): # 获取建造结果pass

3.3 实现具体建造者(ConcreteBuilder)

"""
我们建造两种电脑机型,游戏机、办公机
这两种机型分别有不同的配置
"""class GamingComputerBuilder(ComputerBuilder):# 游戏机def __init__(self):self.computer = Computer("", "", "")def build_cpu(self):self.computer.cpu = "Intel Core i9"def build_ram(self):self.computer.ram = "32GB"def build_hard_disk(self):self.computer.hard_disk = "1TB SSD"def get_computer(self):return self.computerclass OfficeComputerBuilder(ComputerBuilder):# 办公机def __init__(self):self.computer = Computer("", "", "")def build_cpu(self):self.computer.cpu = "Intel Core i5"def build_ram(self):self.computer.ram = "8GB"def build_hard_disk(self):self.computer.hard_disk = "500GB HDD"def get_computer(self):return self.computer

3.4 定义指挥者(Director)

# 指挥者负责指挥具体建造者建造产品class Director:def __init__(self, builder):self.builder = builderdef construct(self):self.builder.build_cpu()self.builder.build_ram()self.builder.build_hard_disk()

3.5 使用建造者模式

# 创建一个 GamingComputer 的建造者
gaming_builder = GamingComputerBuilder()# 创建一个 Director 对象
director = Director(gaming_builder)# 指挥者构建 GamingComputer
director.construct()# 获取构建好的产品
gaming_computer = gaming_builder.get_computer()
print(gaming_computer)# 创建一个 OfficeComputer 的建造者
office_builder = OfficeComputerBuilder()# 指挥者构建 OfficeComputer
director.builder = office_builder
director.construct()# 获取构建好的产品
office_computer = office_builder.get_computer()
print(office_computer)

3.6 输出结果

Computer [CPU=Intel Core i9, RAM=32GB, Hard Disk=1TB SSD]

Computer [CPU=Intel Core i5, RAM=8GB, Hard Disk=500GB HDD]

4. 建造者模式的优点

  • 分离了复杂对象的构建过程与表示:使用建造者模式可以将复杂对象的构建过程与其表示分离,这样客户端代码就无需了解对象如何创建,可以专注于如何组织建造过程。
  • 灵活性高:不同的建造者可以创建不同配置的产品。用户可以自由选择需要的建造者,从而定制产品的构建。
  • 提高代码的可扩展性:如果有新的产品类型需要构建,可以通过添加新的建造者来实现,而无需修改现有的代码。

5. 建造者模式的缺点

  • 类的数量增加:使用建造者模式时,通常需要为每种产品创建多个建造者类,这会增加系统中的类数量。
  • 不适用于简单对象:如果对象的构建非常简单,使用建造者模式可能会导致不必要的复杂性。

6. 适用场景

  • 复杂对象的创建:当一个对象的构建需要多个步骤,且这些步骤有可能会变动时,使用建造者模式会使得代码更加清晰、易于维护。
  • 需要创建多个复杂对象:当一个系统需要创建多个类型的对象,并且这些对象有不同的配置时,可以通过使用不同的建造者来简化代码。

7. 总结

建造者模式通过分离对象的创建过程和表示,使得我们能够更加灵活、简洁地构建复杂对象。它在需要创建复杂对象或多个不同配置的对象时非常有用,可以有效减少构造函数的复杂度,同时提高代码的可维护性和可扩展性。

通过上面的例子,我们可以看到,建造者模式能够将构建的各个步骤分离并且组织起来,简化了客户端的使用过程,同时提高了系统的灵活性。

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com