python简单学 建造者模式【Builder Pattern】

在软件开发中,有时候我们需要创建复杂的对象,这些对象可能由多个部分组成,而且构建过程可能比较繁琐。这时候,建造者模式就可以派上用场了。

什么是建造者模式?

建造者模式是一种创建型设计模式,它可以将一个复杂对象的构建过程与它的表示分离开来,从而使得同样的构建过程可以创建不同的表示。简单来说,就是把构建过程封装起来,使得我们可以通过一系列简单的步骤来构建一个复杂的对象。

如何工作?

建造者模式通常包括以下几个角色:

  1. 产品(Product):要构建的复杂对象,它由多个部件组成。

  2. 抽象建造者(Builder):定义了创建产品各个部件的抽象接口,包括创建产品、设置产品部件属性等方法。

  3. 具体建造者(Concrete Builder):实现了抽象建造者接口,负责构建具体产品,即实现了产品的各个部件的具体构建过程。

  4. 指挥者(Director):负责指导具体建造者按照一定的构建顺序来构建产品,通常不涉及产品的具体构建细节。

优点

  • 封装性好:将产品的构建过程与表示分离,使得构建过程独立于具体的产品类。
  • 灵活性强:可以根据需求构建不同的产品表示,而不影响构建过程。
  • 便于控制构建过程:指挥者可以根据需求来控制具体建造者的构建过程,实现灵活的构建过程控制。

缺点

  • 增加了代码量:引入了额外的抽象建造者和具体建造者类,增加了代码的复杂度。

何时使用?

  • 当产品的构建过程比较复杂,需要将构建过程与表示分离时,可以考虑使用建造者模式。
  • 当需要构建的产品具有较多的可选配置项时,可以使用建造者模式来封装构建过程,简化客户端代码。

示例说明

比如我们要构建一台电脑,它包括 CPU、内存、硬盘等多个部件。使用建造者模式,我们可以将构建过程封装起来,由具体建造者来负责具体部件的构建,而指挥者则负责控制构建过程的顺序。这样,我们可以根据需求创建不同配置的电脑,而不需要关心具体的构建细节。
 

# 产品类 - 电脑
class Computer:
    def __init__(self):
        self.cpu = None
        self.memory = None
        self.disk = None

    def __str__(self):
        return f"Computer: CPU={self.cpu}, Memory={self.memory}, Disk={self.disk}"

# 抽象建造者类
class ComputerBuilder:
    def __init__(self):
        self.computer = Computer()

    def set_cpu(self, cpu):
        self.computer.cpu = cpu

    def set_memory(self, memory):
        self.computer.memory = memory

    def set_disk(self, disk):
        self.computer.disk = disk

    def get_computer(self):
        return self.computer

# 具体建造者类 - 高配电脑
class HighEndComputerBuilder(ComputerBuilder):
    def build_cpu(self):
        self.set_cpu("Intel Core i9")

    def build_memory(self):
        self.set_memory("32GB DDR4")

    def build_disk(self):
        self.set_disk("1TB SSD")

# 具体建造者类 - 低配电脑
class LowEndComputerBuilder(ComputerBuilder):
    def build_cpu(self):
        self.set_cpu("Intel Core i3")

    def build_memory(self):
        self.set_memory("8GB DDR3")

    def build_disk(self):
        self.set_disk("256GB HDD")

# 指挥者类
class Director:
    def __init__(self, builder):
        self.builder = builder

    def construct(self):
        self.builder.build_cpu()
        self.builder.build_memory()
        self.builder.build_disk()

# 客户端代码
if __name__ == "__main__":
    high_end_builder = HighEndComputerBuilder()
    low_end_builder = LowEndComputerBuilder()

    director = Director(high_end_builder)
    director.construct()
    high_end_computer = high_end_builder.get_computer()
    print("High-end Computer:", high_end_computer)#输出:High-end Computer: Computer: CPU=Intel Core i9, Memory=32GB DDR4, Disk=1TB SSD


    director = Director(low_end_builder)
    director.construct()
    low_end_computer = low_end_builder.get_computer()
    print("Low-end Computer:", low_end_computer)#输出Low-end Computer: Computer: CPU=Intel Core i3, Memory=8GB DDR3, Disk=256GB HDD

在这个示例中,我们定义了产品类 Computer 表示电脑,以及抽象建造者类 ComputerBuilder 和两个具体建造者类 HighEndComputerBuilderLowEndComputerBuilder,分别用于构建高配和低配电脑。指挥者类 Director 负责控制具体建造者的构建过程。客户端代码创建具体建造者对象,并通过指挥者来构建不同配置的电脑。

结论

建造者模式是一种简单而强大的设计模式,它可以帮助我们创建复杂的对象,使得对象的构建过程更加灵活和可控,同时也提高了代码的可维护性和扩展性。当需要构建复杂对象或者对象具有多个可选配置项时,建造者模式是一个不错的选择。

  • 6
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
建造者模式是一种创建型设计模式,旨在通过将对象的构造与其表示分离来解决复杂对象的创建问题。该模式允许您按照步骤构建对象,同时也提供一种灵活的方式来创建不同类型的对象。 在Python中,建造者模式通常使用类和方法来实现。以下是一个基本的建造者模式示例: ```python class Computer: def __init__(self): self.__monitor = None self.__keyboard = None self.__mouse = None def set_monitor(self, monitor): self.__monitor = monitor def set_keyboard(self, keyboard): self.__keyboard = keyboard def set_mouse(self, mouse): self.__mouse = mouse class ComputerBuilder: def __init__(self): self.__computer = Computer() def get_computer(self): return self.__computer def build_monitor(self): monitor = "Dell Monitor" self.__computer.set_monitor(monitor) def build_keyboard(self): keyboard = "Logitech Keyboard" self.__computer.set_keyboard(keyboard) def build_mouse(self): mouse = "Microsoft Mouse" self.__computer.set_mouse(mouse) class Director: def __init__(self, builder): self.__builder = builder def build_computer(self): self.__builder.build_monitor() self.__builder.build_keyboard() self.__builder.build_mouse() builder = ComputerBuilder() director = Director(builder) director.build_computer() computer = builder.get_computer() ``` 在上面的示例中,我们定义了一个Computer类,它包含了电脑的一些属性,如显示器、键盘和鼠标等。我们还定义了一个ComputerBuilder类,它允许我们按照步骤构建Computer对象。最后,我们定义了一个Director类,它协调ComputerBuilder的构建过程。 当我们需要创建一个新的Computer对象时,我们只需创建一个ComputerBuilder实例并将其传递给Director类。Director类将协调ComputerBuilder的构建过程,并返回一个完整的Computer对象。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值