关于设计模式:设计模式建造者Builder模式

2次阅读

共计 1311 个字符,预计需要花费 4 分钟才能阅读完成。

模式定义

将一个简单对象的创立与他的示意拆散,使得同样的构建过程能够创立不同的示意

类图

利用场景

1. 须要生成的对象具备简单的内部结构;

2. 须要生成的对象外部属性自身相互依赖;

3. 与不可变对象配合应用;

长处

1. 建造者独立,易扩大;

2. 便于管制细节危险;

要点总结

  • Builder 模式次要用于“分步骤构建一个简单的对象”,在这其中“分步骤”是一个稳固的算法,而简单对象的各个局部则常常变动
  • 变动点在哪里,封装哪里 —-Builder 模式次要在于应答“简单对象各个局部”的频繁需要变动,其毛病在于难以应答“分步骤构建算法”的需要变动

Go 语言代码实现

工程目录

Builder.go

package Builder

type Builder interface {Part1()
   Part2()
   Part3()}

type Director struct {builder Builder // 建造者的接口}

// 发明接口
func NewDirector (builder Builder) *Director {return &Director{builder: builder}
}


func (d *Director) Makedata(){d.builder.Part1()
   d.builder.Part2()
   d.builder.Part3()}

StringBuilder.go

package Builder

type StringBuilder struct {result string}

func (sb *StringBuilder) Part1 ()  {sb.result += "1"}

func (sb *StringBuilder) Part2 ()  {sb.result += "2"}

func (sb *StringBuilder) Part3 ()  {sb.result += "3"}

func (sb *StringBuilder) GetResult() string {return sb.result}

IntBuilder.go

package Builder

type IntBuilder struct {result int64}

func (ib *IntBuilder) Part1 ()  {ib.result += 1}

func (ib *IntBuilder) Part2 ()  {ib.result += 2}

func (ib *IntBuilder) Part3 ()  {ib.result += 3}

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

Builder_test.go

package Builder

import (
   "fmt"
   "testing"
)

func TestIntBuilder(t *testing.T) {sbuilder := &StringBuilder{}
   dict := NewDirector(sbuilder)
   dict.Makedata()
   fmt.Println(sbuilder.GetResult())

   ibuilder := &IntBuilder{}
   dict = NewDirector(ibuilder)
   dict.Makedata()
   fmt.Println(ibuilder.GetResult())
}
正文完
 0