Python建造者模式介绍、使用方法

一、Python建造者模式简介

        1. 概念

建造者模式(Builder Pattern)是一种创建型设计模式,它可以将复杂对象的构造与表示分离,使得同样的构建过程可以创建不同的表现形式。该模式通过一步一步创建复杂对象,将对象的构造过程与表示过程解耦。

        2. 功能

建造者模式使得对象的构造过程与其表现形式相互独立,可以灵活地组合不同的构造过程来得到不同的表现形式。

        3. 优点

  • 将对象的构造过程与其表现形式解耦,可以灵活地组合不同的构造过程来得到不同的表现形式。
  • 使得代码结构更加清晰,易于维护和扩展。
  • 可以有效地控制对象的创建过程,生成符合设计要求的对象。

        5. 缺点

  • 建造者模式需要编写较多的代码,且在构造对象时需要一定的时间和精力。
  • 如果需要创建的对象较少或者结构较简单,则建造者模式可能会增加代码的复杂性。

        6. 应用场景

建造者模式通常应用于以下场景:

  • 需要创建复杂对象。
  • 需要创建一系列相关的对象,且它们的构造过程大致相同。
  • 需要在构造对象时对其进行一定的控制,以确保生成的对象符合设计要求。

        7. 使用方式

在Python中,可以使用类和方法来实现建造者模式。通常来说,建造者模式包括以下几个组成部分:

  • 产品类(Product):表示被构造的复杂对象。
  • 抽象建造者类(Builder):声明抽象方法来构建不同部分的复杂对象。
  • 具体建造者类(Concrete Builder):实现抽象建造者类中的方法来构建对象的各个部分,并返回构建好的对象。
  • 指挥者类(Director):负责调用具体建造者类中的方法来构建复杂对象。

        8. 在应用程序开发中的应用

建造者模式在应用程序开发中的应用场景较为广泛。例如,在 Web 开发中,我们可以使用建造者模式来构建复杂的 HTML 页面、邮件消息等。在游戏开发中,我们可以使用建造者模式来生成游戏场景、角色等。在数据库开发中,我们可以使用建造者模式来构建 SQL 查询语句等。

二、建造者模式示例

工作原理

Python建造者模式的工作原理主要涉及以下几个角色和步骤:

  1. 产品类(Product):表示被构造的复杂对象。

  2. 抽象建造者类(Builder):声明抽象方法来构建不同部分的复杂对象。

  3. 具体建造者类(Concrete Builder):实现抽象建造者类中的方法来构建对象的各个部分,并返回构建好的对象。

  4. 指挥者类(Director):负责调用具体建造者类中的方法来构建复杂对象。

具体的工作流程如下:

  1. 创建一个产品类,该类表示待构建的复杂对象,可以包含多个部分。

  2. 创建一个抽象的建造者类,该类声明了构建不同部分的抽象方法。

  3. 创建具体的建造者类,该类实现抽象建造者类中的方法,构建对象的各个部分,并返回构建好的对象。

  4. 创建一个指挥者类,该类负责调用具体建造者类中的方法来构建复杂对象。

  5. 在应用程序中,创建具体建造者类的实例,并将其传递给指挥者类。指挥者类使用具体建造者类中的方法来构建复杂对象。

  6. 最后,应用程序可以使用构建好的复杂对象。

Python建造者模式的工作原理可以简化为:通过把复杂对象的构造过程与表现分离,以及灵活组合不同的构造过程来得到不同的表现形式。其核心在于分步骤构造对象,使得对象的构造过程与表现相互独立,同时可以通过更改构造过程的某些部分来得到不同的表现形式。

示例

假设我们需要构建一个计算机,计算机包含CPU、内存、硬盘、显卡等部件。我们可以使用Python建造者模式来构建这个复杂对象。具体实现步骤如下:

  1. 首先创建一个产品类——计算机类,它包含CPU、内存、硬盘、显卡等部件,并提供各个部件的设置和获取方法。
  2. 然后创建一个抽象建造者类——计算机建造者类,它声明了构建不同部分的抽象方法:
  3. 接着创建具体的建造者类——台式机建造者类和笔记本建造者类,它们实现了抽象建造者类中的方法,构建对象的各个部分,并返回构建好的对象:
  4. 由于计算机建造的过程比较复杂,我们需要创建一个指挥者类——计算机装配员类,它负责调用具体建造者类中的方法来构建复杂对象:
  5. 最后,我们可以使用以上代码来创建不同的计算机,例如:

# 创建产品类
class Computer():
    def __init__(self):
        self.cpu = None
        self.memory = None
        self.hark_disk = None
        self.graphics_card = None

    def set_cpu(self, cpu):
        self.cpu = cpu
    def set_memory(self, memory):
        self.memory = memory
    def set_hard_disk(self, hard_disk):
        self.hark_disk = hard_disk
    def set_graphics_card(self, graphics_card):
        self.graphics_card = graphics_card
    def get_specs(self):
        specs = f'CPU:{self.cpu}\nMemory:{self.memory}\nHard Disk:{self.hark_disk}\nGraphics Card:{self.graphics_card}'
        return specs

# 创建抽象的建造者类
class ComputerBuilder():
    def build_cpu(self): # 声明构建不同部分的抽象方法
        pass
    def build_memory(self):
        pass
    def build_hard_disk(self):
        pass
    def build_graphics_card(self):
        pass
    def get_computer(self):
        pass

# 创建具体的建造者类
class DesktopBuilder(ComputerBuilder): # 继承抽象的建造者类
    def __init__(self):
        self.computer = Computer() # 初始化产品类
    def build_cpu(self): # 实现抽象建造者方法
        self.computer.set_cpu("Intel Core 7") # 设置产品类方法值
    def build_memory(self):
        self.computer.set_memory("16GB DDR4")
    def build_hard_disk(self):
        self.computer.set_hard_disk("1TB HDD")
    def build_graphics_card(self):
        self.computer.set_graphics_card("NVIDIA GTX 1050")
    def get_computer(self):
        return self.computer

class LaptopBuilder(ComputerBuilder):
    def __init__(self):
        self.computer = Computer()
    def build_cpu(self):
        self.computer.set_cpu("Intel Core i5")
    def build_memory(self):
        self.computer.set_memory("8GB DDR4")
    def build_hard_disk(self):
        self.computer.set_hard_disk("256GB SSD")
    def build_graphics_card(self):
        self.computer.set_graphics_card("Intergrated")
    def get_computer(self):
        return self.computer
# 创建指挥者
class ComputerAssembler:
    def __init__(self,builder):
        self.builder = builder
    def assemble(self):
        self.builder.build_cpu() # 调用具体建造者类方法
        self.builder.build_memory()
        self.builder.build_hard_disk()
        self.builder.build_graphics_card()
        return self.builder.get_computer()
# 创建台式计算机
desktop_builder = DesktopBuilder()
desktop_assembler = ComputerAssembler(desktop_builder)
desktop = desktop_assembler.assemble()
print(desktop.get_specs())

# 创建笔记本计算机
laptop_builder = LaptopBuilder()
laptop_assembler = ComputerAssembler(laptop_builder)
laptop = laptop_assembler.assemble()
print(laptop.get_specs())


输出结果如下:

CPU:Intel Core 7
Memory:16GB DDR4
Hard Disk:1TB HDD
Graphics Card:NVIDIA GTX 1050
CPU:Intel Core i5
Memory:8GB DDR4
Hard Disk:256GB SSD
Graphics Card:Intergrated

通过以上示例,我们可以看到Python建造者模式的使用方法,它通过分步骤构造对象,使得对象的构造过程与表现相互独立,同时也提供了更好的灵活性和可维护性。

猜你喜欢

转载自blog.csdn.net/songpeiying/article/details/131902497