模式定义
造者模式(Builder Pattern):将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。
建造者模式是一步一步创建一个复杂的对象,它允许用户只通过指定复杂对象的类型和内容就可以构建它们,用户不需要知道内部的具体构建细节。建造者模式属于对象创建型模式。根据中文翻译的不同,建造者模式又可以称为生成器模式。
模式结构
建造者模式包含如下角色:
Builder:抽象建造者
ConcreteBuilder:具体建造者
Director:指挥者
Product:产品角色
适用环境
在以下情况下可以使用建造者模式:
需要生成的产品对象有复杂的内部结构,这些产品对象通常包含多个成员属性。
需要生成的产品对象的属性相互依赖,需要指定其生成顺序。
对象的创建过程独立于创建该对象的类。在建造者模式中引入了指挥者类,将创建过程封装在指挥者类中,而不在建造者类中。
隔离复杂对象的创建和使用,并使得相同的创建过程可以创建不同的产品。
代码实现
package main
import "fmt"
// 游戏地图
// 要求 天是蓝的 风1级 一个男人 一个鸟
type Map struct {
Sky
Bird
Wind
People
}
func (m *Map) Build() error {
if m.Sky.Color != "blue" ||
m.Bird.Name == "" ||
m.Wind.Level != 1 ||
m.People.Name == "" ||
m.People.Sex != "man" {
return fmt.Errorf(`map build err ....`)
}
return nil
}
type Sky struct {
Color string
}
type Bird struct {
Name string
}
type Wind struct {
Level int // 1 2 3
}
type People struct {
Name string
Sex string
}
func main() {
m := &Map{
Sky: Sky{Color: "blue"},
Bird: Bird{Name: "???"},
Wind: Wind{Level: 1},
People: People{
Name: "???",
Sex: "man",
},
}
err := m.Build()
if err != nil {
panic(err)
}
}