[设计模式 Go实现] 创建型~建造者模式

简介: [设计模式 Go实现] 创建型~建造者模式

建造者模式(Builder Pattern)使用多个简单的对象一步一步构建成一个复杂的对象。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。

一个 Builder 类会一步一步构造最终的对象。该 Builder 类是独立于其他对象的。

代码实现

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
}

单元测试

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)
  }
}

相关文章
|
3月前
|
设计模式 算法
设计模式--建造者模式 builder
这篇文章通过一个电脑购买的例子,详细解释了建造者模式的四个角色(产品类、抽象构建者、实体构建类和指导者类),并提供了相应的代码实现,阐述了建造者模式在设计复杂对象时的应用和优势。
设计模式--建造者模式 builder
|
6月前
|
设计模式
**工厂模式与抽象工厂模式**都是创建型设计模式,用于封装对象创建,减少耦合
【6月更文挑战第23天】**工厂模式与抽象工厂模式**都是创建型设计模式,用于封装对象创建,减少耦合。工厂模式专注于单个对象,通过具体工厂创建具体产品,适用于简单对象创建;抽象工厂则关注一系列相关产品,提供创建一族对象的接口,适用于处理多个不兼容产品族。选择模式基于问题域的复杂性,单个产品需求时用工厂模式,多产品族时用抽象工厂模式。
33 5
|
1月前
|
设计模式 JavaScript Java
Java设计模式:建造者模式详解
建造者模式是一种创建型设计模式,通过将复杂对象的构建过程与表示分离,使得相同的构建过程可以创建不同的表示。本文详细介绍了建造者模式的原理、背景、应用场景及实际Demo,帮助读者更好地理解和应用这一模式。
|
3月前
|
设计模式 算法 Java
Java设计模式-建造者模式(6)
Java设计模式-建造者模式(6)
|
7月前
|
设计模式 搜索推荐 数据库连接
第二篇 创建型设计模式 - 灵活、解耦的创建机制
第二篇 创建型设计模式 - 灵活、解耦的创建机制
|
4月前
|
设计模式 Go
go 设计模式之观察者模式
go 设计模式之观察者模式
|
4月前
|
设计模式 XML 存储
【四】设计模式~~~创建型模式~~~建造者模式(Java)
文章详细介绍了建造者模式(Builder Pattern),这是一种创建型设计模式,用于将复杂对象的构建与其表示分离,允许分步骤创建一个复杂的对象而无需指定其内部的具体构造细节。通过定义抽象建造者、具体建造者、指挥者和产品角色,建造者模式允许通过相同的构建过程创建不同的产品表示,提高了系统的灵活性和扩展性。
|
5月前
|
设计模式 Go
Go语言设计模式:使用Option模式简化类的初始化
在Go语言中,面对构造函数参数过多导致的复杂性问题,可以采用Option模式。Option模式通过函数选项提供灵活的配置,增强了构造函数的可读性和可扩展性。以`Foo`为例,通过定义如`WithName`、`WithAge`、`WithDB`等设置器函数,调用者可以选择性地传递所需参数,避免了记忆参数顺序和类型。这种模式提升了代码的维护性和灵活性,特别是在处理多配置场景时。
77 8
|
6月前
|
设计模式 Oracle Java
工厂模式是一种创建型设计模式,它提供了一种创建对象的最佳方式。
【6月更文挑战第20天】工厂模式简化对象创建,根据参数或条件生成MySQL或Oracle数据库连接。`DatabaseConnectionFactory`作为工厂,动态返回具体连接类型。装饰器模式则用于运行时动态增加对象功能,如`LoggingDecorator`为`Runnable`对象添加日志记录,保持代码整洁。在`Main`类中展示了如何使用这两种模式。
43 6
|
6月前
|
设计模式 算法
建造者模式-大话设计模式
建造者模式-大话设计模式