文章目录
- 1. 概念
- 1.1 角色
- 1.2 类图
- 2. 代码示例
- 2.1 设计
- 2.2 代码
- 2.3 类图
1. 概念
1.1 角色
- Builder(抽象建造者):给出一个抽象接口,以规范产品对象的各个组成成分的建造。
- ConcreteBuilder(具体建造者):它们在应用程序调用下创建产品的实例
- Director(导演者):调用具体建造者角色以创建产品对象。
它没有产品类的具体知识,真正拥有产品类的具体知识的是具体建造者。
- Product(产品):产品便是建造中的复杂对象。
1.2 类图
2. 代码示例
2.1 设计
- 定义一个产品
Product
,它包含PartA
、PartB
两个成员 - 定义一个抽象建造者
Builder
- 它有
BuildPartA()
、BuildPartB()
两个方法
- 它有
- 定义具体建造者
ConcreteBuilder
- 它依赖产品
Product
- 它有
BuildPartA()
、BuildPartB()
两个方法,分别用来创建Product的两个部分。
- 它依赖产品
- 定义导演者
Director
- 它关联了建造者
Builder
- 它的
Construct()
方法调用建造者创建产品
- 它关联了建造者
- 调用
- 实例化一个产品
product
- 实例化一个建造者
builder
,它依赖产品实例product
- 实例化一个导演者
director
,它关联建造者builder
- 用导演者
director
的Construct()
方法创建产品 - 打印结果检查
- 实例化一个产品
2.2 代码
package main
import "fmt"
// 定义产品
type Product struct {
PartA string
PartB string
}
// 定义抽象建造者
type Builder interface {
BuildPartA(p string)
BuildPartB(p string)
}
// 定义具体建造者
type ConcreteBuilder struct {
product *Product
}
func (c *ConcreteBuilder) BuildPartA(p string) {
c.product.PartA = p
}
func (c *ConcreteBuilder) BuildPartB(p string) {
c.product.PartB = p
}
// 定义导演者
type Director struct {
builder Builder
}
func (d *Director) Construct(partAInfo string, partBInfo string) {
d.builder.BuildPartA(partAInfo)
d.builder.BuildPartB(partBInfo)
}
// 测试代码
func main() {
product := &Product{}
builder := &ConcreteBuilder{product: product}
director := &Director{builder: builder}
director.Construct("刀头", "刀柄")
fmt.Println(product)
}