Hello,大家好,又到周一了,上班上课的都得早起啦。但是在这个心浮气躁的时代,学习总是要继续的。今天我将继续向大家分享Python设计模式的相关知识,今天的主角是建造者模式(Builder Pattern)。
之前我们分享了另外两种设计模式,即单例模式和工厂模式,大家可以从下面找到:
什么是建造者模式? 建造者模式的应用场景 真实场景的案例实现(Python版本) 建造者模式的优缺点
建造者模式(Builder Pattern)是一种创建型设计模式,它通过将对象的构建过程与表示分离,使得同样的构建过程可以创建不同的表示。该模式主要解决了在复杂对象创建时,需要一步步构建并可以灵活控制建造过程的问题。
建造者模式主要包含以下几个角色,每个角色在模式中都有特定的作用,并且它们之间有明确的关系。
作用:定义创建复杂对象的各个部件的抽象接口。具体包括各个部件的创建方法,但不具体实现这些方法。
主要方法:
build_partA(): 构建对象的某个部件A。build_partB(): 构建对象的某个部件B。get_result(): 返回最终构建的复杂对象。作用:实现 Builder 接口,具体构建和装配各个部件,最终返回构建的复杂对象。
主要方法:
build_partA()、build_partB()。get_result(): 返回最终构建的复杂对象。作用:构建一个使用 Builder 接口的对象。它主要负责控制构建过程的顺序。指挥者并不知道具体的产品细节,它只是通过 Builder 接口控制建造过程。
主要方法:
construct(): 调用具体建造者的方法按照一定顺序构建复杂对象。作用:表示被构建的复杂对象。具体的产品由多个部件组成。
Product 的各个部件的抽象接口。Builder 接口,并且具体构建和装配各个部件,最后返回一个 Product 实例。Builder 接口,控制创建产品的过程。它知道如何一步步创建一个复杂对象,但不知道具体的对象是什么。ConcreteBuilder 构建的复杂对象。下面是建造者模式的UML图:
建造者模式适用于以下场景:
假设我们要创建一个复杂的 House 对象。House 由 walls、doors、windows 和 roof 等部件组成。用建造者模式实现如下:
from abc import ABC, abstractmethod
# Product role
class House:
def __init__(self):
self.walls = None
self.doors = None
self.windows = None
self.roof = None
def __str__(self):
return f"House with {self.walls}, {self.doors}, {self.windows}, and {self.roof}."
# Builder role
class HouseBuilder(ABC):
@abstractmethod
def build_walls(self):
pass
@abstractmethod
def build_doors(self):
pass
@abstractmethod
def build_windows(self):
pass
@abstractmethod
def build_roof(self):
pass
@abstractmethod
def get_house(self):
pass
# Concrete Builder role
class ConcreteHouseBuilder(HouseBuilder):
def __init__(self):
self.house = House()
def build_walls(self):
self.house.walls = 'brick walls'
def build_doors(self):
self.house.doors = 'wooden doors'
def build_windows(self):
self.house.windows = 'glass windows'
def build_roof(self):
self.house.roof = 'tiled roof'
def get_house(self):
return self.house
# Director role
class Director:
def __init__(self, builder: HouseBuilder) -> None:
self.builder = builder
def construct(self):
self.builder.build_walls()
self.builder.build_doors()
self.builder.build_windows()
self.builder.build_roof()
# Client
def client_code(builder: HouseBuilder):
director = Director(builder)
director.construct()
house = builder.get_house()
print(house)
if __name__ == '__main__':
builder = ConcreteHouseBuilder()
client_code(builder)
House with brick walls, wooden doors, glass windows, and tiled roof.
Builder 类和 Director 类,增加了代码的复杂性。总之,建造者模式非常适合在对象的创建过程中需要进行频繁修改和扩展的场景。例如,在开发游戏时,可能需要不断调整游戏角色的属性和能力,使用建造者模式可以方便地进行这些调整。
此外,建造者模式可以与其他设计模式结合使用,例如,建造者模式可以与原型模式(Prototype Pattern)(后面我们会单独讲到)结合,用于在构建复杂对象时进行对象的复制。
OK,关于建造者模式的知识就分享到这啦,感谢您的阅读!🙇🙇🙇
推荐阅读👇👇👇
Python设计模式(二):工厂模式(Factory Pattern)
编写高效Python函数的5个技巧,真心建议你牢记,并当作此后编码的准绳!
Python自动化:适合新手练习的5个有趣又实用的Python脚本,帮你快速掌握编程技能!拿走不谢!
- END -
🌟 如果你喜欢这篇文章并且愿意支持我的话,你可以:🌟
👍👍👍 点赞文章 ⤴️⤴️⤴️ 转发文章 ⚛️⚛️⚛️ 点击在看 🧑🤝🧑🧑🤝🧑🧑🤝🧑 让文章被推荐给更多人,找到更多志同道合的伙伴 👏👏👏 欢迎给我留言 关注我,第一时间接收更多关于Python、数据分析和机器学习的深入分析和最新趋势。我们一起探索数据的力量,解锁AI的潜能。你的每一次互动都是对我的极大鼓励,也是我们共同成长的动力!
👇👇👇 关注并开启星标提醒,让知识与技能的火花不断在你的职业道路上燃烧吧!
原文作者:数据派探险家;如有侵权,请联系管理员删除。