第一章 前言
第二章 观察者模式
第三章 状态模式
第四章 中介模式
第五章 装饰器模式
第六章 单例模式
第七章 克隆模式
第八章 职责链模式
第九章 代理模式
第十章 外观模式
第十一章 迭代模式
第十二章 组合模式
第十三章 构建模式
第十四章 适配模式
第十五章 策略模式
第十六章 简单工厂模式
第十七章 工厂方法模式
第十八章 抽象工厂模式
第十九章 命令模式
第二十章 备忘录模式
第二十一章 享元模式
第二十二章 访问模式
第二十三章 模板模式
第二十四章 桥接模式
第二十五章 解释器模式
第二十六章 过滤器模式
第二十七章 对象池技术
第二十八章 回调机制
第二十九章 MVC模式
附录
1. 核心思想
将一复杂对象的构建过程和它的表现分离,使得同样的构建过程可以获取(创建)不同的表现。
建造者模式可以将一个产品的内部表象与产品的生成过程分割开来,从而可以使一个建造过程生成具有不同的内部表象的产品对象。如果我们用了建造者模式,那么用户就只需指定需要建造的类型就可以得到它们,而具体建造的过程和细节就不需知道了。比如一份炒粉,炒粉有一系列的制作流程,但是我们购买时并不需要知道是如何炒的,我们只需要报出自己的需求,是辣一点还是加肉或者鸡蛋等,就可以得到一份符合自己口味的炒粉了。
构建模式是一个产品或对象的生成器,强调产品的构建过程。
2. UML类图
3. 框架代码
from abc import ABC, abstractmethod
class Produt:
def __init__(self, name, parts):
self.name = name
self._parts = parts
def addPart(self, part):
self._parts.append(part)
def __str__(self) -> str:
return f"产品{self.name}开始创建:\n"+"\n".join([f"add {part}" for part in self._parts])+f"\n产品{self.name}创建完成!"
class Builder(ABC):
@abstractmethod
def buildPartA(self):
pass
@abstractmethod
def buildPartB(self):
pass
@abstractmethod
def getResult(self):
pass
class BuilderImplA(Builder):
def __init__(self, product:Produt):
self._product = product
def buildPartA(self):
self._product.addPart("part_A")
def buildPartB(self):
self._product.addPart("part_B")
def getResult(self):
return self._product
class BuilderImplB(Builder):
def __init__(self, product:Produt):
self._product = product
def buildPartA(self):
self._product.addPart("part_X")
def buildPartB(self):
self._product.addPart("part_Y")
def getResult(self):
return self._product
class Director:
def __init__(self, builder:Builder) -> None:
self._builder = builder
def construct(self):
self._builder.buildPartA()
self._builder.buildPartB()
if __name__ == "__main__":
b1 = BuilderImplA(Produt("A",[]))
b2 = BuilderImplB(Produt("B",[]))
Director(b1).construct()
Director(b2).construct()
print(b1.getResult())
print()
print(b2.getResult())
4. 模型说明
4.1 设计要点
构建模式中主要有三个角色,在设计构建模式时要找到并区分这些角色。
- 产品(Product):即你要构建的对象;
- 构建者(Builder):构建模式的核心类,负责产品的构建过程;
- 指挥者(Director):构建的管理类,负责管理每一种产品的创建数量和创建顺序。
4.2 优缺点
- 优点
- 将产品(对象)的创建过程与产品(对象)本身分离开来,让使用方(调用者)可以用相同的创建过程创建不同的产品(对象)。
- 将对象的创建过程单独分解出来,使得创建过程更加清晰,能够更加精确地控制复杂对象的创建过程。
- 每一个具体构建者都相对独立,而与其他的具体构建者无关,因此可以很方便地替换具体构建者或增加新的具体构建者。
- 缺点:
- 增加了很多创建类,如果产品的类型和种类比较多,将会增加很多类,使整个系统变得更加庞杂。
- 产品之间的结构相差很大时,构建模式将很难适应。
5. 应用场景
- 产品(对象)的创建过程比较复杂,希望将产品的创建过程和它本身的功能分离开来。
- 产品有很多种类,每个种类之间内部结构比较类似,但有很多差异;不同的创建顺序或不同的组合方式,将创建不同的产品。