首页
读书
网课

正文

将一个复杂对象的构建分离成多个简单对象的构建组合


builder.go

package builder


//Builder 是生成器接口

type Builder interface {

    Part1()

    Part2()

    Part3()

}


type Director struct {

    builder Builder

}


// NewDirector ...

func NewDirector(builder Builder) *Director {

    return &Director{

        builder: builder,

    }

}


//Construct Product

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

}



builder_test.go


package builder


import "testing"


func TestBuilder1(t *testing.T) {

    builder := &Builder1{}

    director := NewDirector(builder)

    director.Construct()

    res := builder.GetResult()

    if res != "123" {

        t.Fatalf("Builder1 fail expect 123 acture %s", res)

    }

}


func TestBuilder2(t *testing.T) {

    builder := &Builder2{}

    director := NewDirector(builder)

    director.Construct()

    res := builder.GetResult()

    if res != 6 {

        t.Fatalf("Builder2 fail expect 6 acture %d", res)

    }

}



上一篇: 没有了
下一篇: 没有了
圣贤书院