建造者模式-使用go实现

一.建造者模式的定义

	构造者模式的意图在于将一个复杂的构建与其表示相分离,使得同样的构建过程可以创建不同的表示。

二.组成

	建造者模式由以下几个关键角色组成:
	1.产品: 表示被构建的复杂对象。产品类通常具有多个属性。
	2.抽象构造者:定义了创建产品的抽象接口,包括各个构建步骤的方法。
	3.具体建造者:实现了抽象建造者接口,负责实际构建产品。
	4.指挥者:负责使用构建者对象构建产品。它定义了构建的顺序和步骤,同构调用建造者的方法来构建产品。

三.使用步骤

	1.定义产品类,确定产品的属性和方法。
	2.创造抽象建造者接口,定义产品构建的各个步骤方法
	3.创建具体建造者类,实现抽象建造者接口。在具体建造者类中,实现每个步骤方法来构建产品的各个部分,并提供获取最终产品的方法。
	4.创建指挥者:负责按照特定顺序调用建造者的方法来构建产品。
	5.在客户端代码中,创建具体建造者对象和指挥者对象,并通过指挥者对象来构建产品。

四.代码示例

// 产品
type Product struct {
	parts []string
}

// 产品的添加方法
func (p *Product) AddPart(part string) {
	p.parts = append(p.parts, part)
}

// 展示全部产品的方法
func (p *Product) ShowParts() {
	fmt.Println("Product parts:")
	for _, part := range p.parts {
		fmt.Println(part)
	}
}

// 抽象建造者
type Builder interface {
	BuildPartA()
	BuildPartB()
	GetResult() *Product
}

// 具体建造者
type ConcreteBuilder struct {
	product *Product
}

func NewConCreteBuilder() *ConcreteBuilder {
	return &ConcreteBuilder{
		product: &Product{},
	}
}

func (s *ConcreteBuilder) BuildPartA() {
	s.product.AddPart("Part A")
}

func (s *ConcreteBuilder) BuildPartB() {
	s.product.AddPart("Part B")
}

func (s *ConcreteBuilder) GetResult() *Product {
	return s.product
}

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

func (d *Director) Construct() {
	d.builder.BuildPartA()
	d.builder.BuildPartB()
}

func main() {
	builder := NewConCreteBuilder()
	director := &Director{builder: builder}

	director.Construct()
	product := builder.GetResult()
	product.ShowParts()
}

五.优点

	1.将一个复杂对象的创建过程封装起来
	2.解耦了组装过程和创建具体的部件,使得我们不用去关心每个部件是如何组装的
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值