翻译于https://davidcorne.com/2013/01/21/builder-pattern/
注:不是原文翻译,有些自己的理解改动
一、 目的
builder设计模式(以下均称建造者模式)的意思是指一个对象的构造是抽象的,以便于许多的实现能够使用相同的builder,实际的类构造逻辑跟它的表现是分开的。
二、 模式
下面是一般的UML类图
上图中的 product
表示你想要创建的实际的类,这个类被称为 Director
(导演)所调用。
这个 Director
持有 builder
的一个实例,并调用它的 create()
方法,这个成员是 ConcreteBuilder
类的一个实例,这个 ConcreteBuilder
类实现了你想要的指定 product
的逻辑
这个抽象的逻辑是需要用来创建不同的 product
类型,这个 product
也可以是一个接口,每个 ConcreteBuilder
也可能返回一个不同的产品类型。
译者注:Director
表示具体创建 product
的类或者代码块;ConcreteBuilder
表示一个具体的 builder
类,
三、 一个例子使用
这个例子主要描述不同车辆的构造,所有的代码包含在这个文件中this file
这个例子中的车辆就表示 product
,下面是具体的类:
因此不同的车辆有不同的名字、轮胎的数量和座位数,这个 view()
方法将打印出车辆的具体信息。
车辆实例的构造将通过 ConcreteBuilder
类来完成的,这些类是来自 builder
接口(抽象类),下面是 builder
,即这个例子中的 VehicleBuilder
类代码:
这里使用了python中的 ABC
模块
译者注:ABC
模块是python中关于抽象类的一些定义
这个 builder
有三个方法用来设置车辆,这个例子中的 ConcreteBuilder
有两个: CarBuilder
和 BikeBuilder
,他们都是继承于 VehicleBuilder
,下面是这些类的实现:
这些类的逻辑就是对车辆的创建及属性的设置。为了使用这些,我们需要创建一个 Director
类,这个例子中就叫做 VehicleManufacturer
这个类有一个 create()
方法。作为你看到的,在注释中写明了:需要一个前提条件就是,需要给这个类中的 builder
属性显示的指定 ConcreteBuilder
。
下面是这个类的调用方式:
下面是结果输出:
下面是这个例子的UML类图:
这篇文章中的所有代码能在这里找到here
感谢你的阅读