文章目录
- 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)
}
2.3 类图




















