建造模式(Builder)

建造模式(Builder)

1.意图

将一个复杂对象的结构与它的表示分离,使得同样的构建过程可以创建不同的表示。

2.适用性

在以下情况使用Builder模式

  • 当创建复杂对象的算法应该独立于该对象的组成部分以及它们的装配方式时。
  • 当构造过程必须允许被构造的对象有不同的表示时。
3.结构

在这里插入图片描述

4.代码
package builder


import "testing"


//Builder 是生成器接口
type Builder interface {
	BuildA()
	BuildB()
	BuildC()
}


type Director struct { //指挥者
	builder Builder
}


// NewDirector ...
func NewDirector(builder Builder) *Director {
	return &Director{
		builder: builder,
	}
}


//Construct Product
func (d *Director) Construct() {
	d.builder.BuildA()
	d.builder.BuildB()
	d.builder.BuildC()
}



type Builder1 struct {
	result string
}


func (b *Builder1) BuildA() {
	b.result += "一"
}


func (b *Builder1) BuildB() {
	b.result += "二"
}


func (b *Builder1) BuildC() {
	b.result += "三"
}

func (b *Builder1) GetResult() string {
	return b.result
}


type Builder2 struct {
	result int
}


func (b *Builder2) BuildA() {
	b.result += 1
}


func (b *Builder2) BuildB() {
	b.result += 2
}


func (b *Builder2) BuildC() {
	b.result += 3
}


func (b *Builder2) GetResult() int {
	return b.result
}


func TestBuilder1(t *testing.T) {
	builder := &Builder1{}
	director := NewDirector(builder)
	director.Construct()
	res := builder.GetResult()
	if res != "一二三" {
		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)
	}
}




type Person struct {
	name string
	sex  int
	age  int
}

type BuildPerson interface {
	WithName(name string) Person
	WithSex(sex int) Person
	WithAge(age int) Person
}

func (this *Person)WithName(name string)*Person{
	this.name=name
	return this
}
func (this *Person)WithSex(sex int)*Person{
	this.sex=sex
	return this
}

func (this *Person)WithAge(age int)*Person{
	this.age=age
	return this
}

func TestPersonCreator(t *testing.T){
	p:=&Person{}
	p.WithAge(1).WithName("小明").WithAge(12)

	t.Log(p)
}

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

metabit

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值