这是要写的创建类模式最后一篇,先看下,建造者模式的定义吧。
将一个复杂对象的构造与它的表示分离,使同样的构建过程可以创建不同的表示。
看到这个定义有点难懂,建造者有以下几个角色。
基于以上的理论,我们还是通过代码来实现
定义接口Builder
type Builder struct {
Part1()
Part2()
Part3()
}
定义Director
type Director struct {
Build Builder
}
func NewBuilder(build Builder) *Director {
return &Director{
Build: build,
}
}
定义Director的ConcreteBuilder
//Construct Product
func (d *Director) Construct() {
d.builder.Part1()
d.builder.Part2()
d.builder.Part3()
}
接下来实现product这个产品
type Builder1 struct {
result string
}
func (b *Builder1) Part1() {
b.result += "1"
}
func (b *Builder1) Part2() {
b.result += "2"
}
func (b *Builder1) Part3() {
b.result += "3"
}
func (b *Builder1) GetResult() string {
return b.result
}
type Builder2 struct {
result int
}
func (b *Builder2) Part1() {
b.result += 1
}
func (b *Builder2) Part2() {
b.result += 2
}
func (b *Builder2) Part3() {
b.result += 3
}
func (b *Builder2) GetResult() int {
return b.result
}
以下实现的完整代码
package main
import "fmt"
type Builder interface {
Part1()
Part2()
Part3()
}
type Director struct {
Builder Builder
}
func NewDirector(builder Builder) *Director {
return &Director{
Builder:builder,
}
}
func (d *Director) Construct() {
d.Builder.Part1()
d.Builder.Part2()
d.Builder.Part3()
}
type Builder1 struct {
result string
}
func (b *Builder1) Part1() {
b.result += "1"
}
func (b *Builder1) Part2() {
b.result += "2"
}
func (b *Builder1) Part3() {
b.result += "3"
}
func (b *Builder1) GetResult() string {
return b.result
}
type Builder2 struct {
result int
}
func (b *Builder2) Part1() {
b.result += 1
}
func (b *Builder2) Part2() {
b.result += 2
}
func (b *Builder2) Part3() {
b.result += 3
}
func (b *Builder2) GetResult() int {
return b.result
}
func main() {
builder1 := &Builder1{}
director1 := NewDirector(builder1)
director1.Construct()
res1 := builder1.GetResult()
fmt.Println("构造1", res1)
builder2 := &Builder2{}
director2 := NewDirector(builder2)
director2.Construct()
res2 := builder2.GetResult()
fmt.Println("构造2", res2)
}
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。