golang设计模式之建造者模式

本文介绍了建造者模式在软件系统中的应用,通过独立的Builder接口和具体实现,如IntBuilder和StringBuilder,来逐步构建复杂对象。Directory类作为导向,负责调用建造过程。建造者模式有助于隔离对象构建过程,方便扩展,并控制细节风险。测试案例展示了如何使用不同类型的Builder创建对象。
摘要由CSDN通过智能技术生成

建造者模式

一个Builder类会一步一步构造最终的对象,该Builder类是独立于其他对象的
主要解决在软件系统中,有时候面临一个复杂对象的创建工作,通常这个复杂对象由各个部分的子对象用一定的算法构建成。由于需求的变化,这个复杂对象的各个部分通常会出现巨大的变化,所以,将各个子对象独立出来,容易修改

实现

  1. 建造所有产品的接口
type Builder interface {
	Process1()
	Process2()
	Process3()
}
  1. 实现具体的产品
type IntBuilder struct {
	result int64
}

func (s *IntBuilder)Process1()  {
	s.result += 1
}

func (s *IntBuilder)Process2()  {
	s.result += 2
}
func (s *IntBuilder)Process3()  {
	s.result += 3
}

func (s *IntBuilder)GetResult() int64 {
	return s.result
}


type StringBuilder struct {
	result string
}

func (s *StringBuilder)Process1()  {
	s.result += "1"
}

func (s *StringBuilder)Process2()  {
	s.result += "2"
}
func (s *StringBuilder)Process3()  {
	s.result+= "3"
}

func (s *StringBuilder)GetResult() string {
	return s.result
}
  1. 实现一个导向
type Directory struct {
	builder Builder  //建造者接口
}

//创建一个接口
func newDirectory( builder Builder) *Directory  {
	return &Directory{builder:builder}
}

//建造顺序
func (d *Directory)Makedata()  {
	d.builder.Process1()
	d.builder.Process2()
	d.builder.Process3()
}
  1. 测试
func TestDirectory_Makedata(t *testing.T)  {
	builder := &StringBuilder{}
	dict := newDirectory(builder)
	dict.Makedata()
	fmt.Println(builder.GetResult())

	builder1 := &IntBuilder{}
	dict1 := newDirectory(builder1)
	dict1.Makedata()
	fmt.Println(builder1.GetResult())
}

优点

  1. 将一个系统中的变与不变分离,容易拓展
  2. 便于控制细节风险

缺点

产品必须有共同特点,范围有限

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值