golang 设计模式-建造者模式

当一个方法有多个变量的时候,我们在调用该方法的时候可能会因为参数的顺序、个数错误,而造成调用错误或者不能达到我们预期的目的。针对这个问题,我们的建造设计模式可以完美的解决这个问题

实现代码 builder.go

package Desktop


import (
"bytes"
)


// builder设计模式,主要解决多变参数传递问题
// xorm就是使用了builder设计模式
// 故事: 平时去面馆吃面,有各种味道的面条(牛肉味、肥肠味等)
// 有各种配料(香菜、葱、姜、辣椒等)
// 第一个客人:一碗牛肉面 加葱、姜
// 第二个客人:一碗牛肉面 加葱、香菜


type MyBuilder struct {
NoodlesType string // 面条口味
Coriander   bool   // 是否加香菜
Onion       bool   // 是否加葱
Ginger      bool   // 是否加姜
Pepper      bool   // 是否加��️
}


// 构造一个结构体
func NewMyBuilder(noodsType string) MyBuilder {
return MyBuilder{NoodlesType: noodsType}
}


// 加香菜
func (myBuilder MyBuilder) withCoriander() MyBuilder {
myBuilder.Coriander = true
return myBuilder
}


// 加葱
func (myBuilder MyBuilder) withOnion() MyBuilder {
myBuilder.Onion = true
return myBuilder
}


// 加姜
func (myBuilder MyBuilder) withGinger() MyBuilder {
myBuilder.Ginger = true
return myBuilder
}


// 加辣椒
func (myBuilder MyBuilder) withPepper() MyBuilder {
myBuilder.Pepper = true
return myBuilder
}


func (myBuilder MyBuilder) String() string {
var buffer bytes.Buffer
buffer.WriteString("要一碗" + myBuilder.NoodlesType + "面,")
if myBuilder.Coriander {
buffer.WriteString("加香菜、")
} else {
buffer.WriteString("不加香菜、")
}


if myBuilder.Onion {
buffer.WriteString("加葱、")
} else {
buffer.WriteString("不加葱、")
}


if myBuilder.Ginger {
buffer.WriteString("加姜、")
} else {
buffer.WriteString("不加姜、")
}


if myBuilder.Pepper {
buffer.WriteString("加��️、")
} else {
buffer.WriteString("不加��️、")
}
buffer.WriteString("\n")
return buffer.String()
}

测试代码 builder_test.go

package Desktop


import (
"fmt"
"testing"
)


func Test_MyBuilder(t *testing.T) {
myBuilder := NewMyBuilder("牛肉").
withCoriander().
withGinger()
str := myBuilder.String()
fmt.Println(str)
}

测试结果:

要一碗牛肉面,加香菜、不加葱、加姜、不加��️、

PASS
ok   _/Users/jason/Desktop 0.008s

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值