chiachan
chiachan
Published on 2020-08-24 / 698 Visits
0

Builder模式(建造者模式)

什么是建造者模式?

  • 建造者模式即组装复杂的实例
  • 时刻关注可替换性

示范代码(builder.go)

package Builder

// 建造者
type Builder interface {
	builderPart1()
	builderPart2()
	builderPart3()
}

// 建工
type Director struct {
	builder Builder
}

func NewDirector(builder Builder) Director {
	return Director{builder: builder}
}

func (d *Director) construct() {
	d.builder.builderPart1()
	d.builder.builderPart2()
	d.builder.builderPart3()
}

// 具体的建造者
type ConcreteBuilder struct {
	index int64
}

func NewConcreteBuilder() *ConcreteBuilder {
	return &ConcreteBuilder{index: 0}
}

func (c *ConcreteBuilder) builderPart1() {
	c.index = c.index + 1
}
func (c *ConcreteBuilder) builderPart2() {
	c.index = c.index + 2
}
func (c *ConcreteBuilder) builderPart3() {
	c.index = c.index + 3
}
func (c *ConcreteBuilder) getResult() int64 {
	return c.index
}

测试用例(builder_test.go)

package Builder

import (
	"fmt"
	"testing"
)

func TestNewConcreteBuilder(t *testing.T) {
	concreteBuilder := NewConcreteBuilder()
	director := NewDirector(concreteBuilder)
	director.construct()
	fmt.Println(concreteBuilder.getResult())
}