• Go构建者模式


    构建者模式是一种创建型设计模式,用于构建复杂的对象。它可以确保在一个 struct 有多个构造函数参数时依旧能保持代码的可读性与清晰性。

    1、链式写法

    type computer struct {
    	cpu string
    	arm string
    }
    
    func NewComputer() *computer {
    	return &computer{}
    }
    
    func (c *computer) SetCPU(CPU string) *computer {
    	c.cpu = CPU
    	return c
    }
    
    func (c *computer) SetARM(ARM string) *computer {
    	c.arm = ARM
    	return c
    }
    
    func main() {
    	c := NewComputer()
    	c.SetCPU("Intel").SetARM("x86")
    	fmt.Println(c)
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24

    2、为什么使用构建者模式

    分离 + 实施更细致的控制:使对象的构建逻辑与其表示相分离。 使用构建者模式,我们可以在调用Build()方法之前,执行更多的操作,比如验证属性的有效性,或者设置一些默认值。一般步骤如下:

    1. 编写原结构体
    2. 编写原结构体的 Builder 结构体,为其编写 New 构建函数
    3. 编写类似于之前链式调用的方法,但是返回 Builder 结构体
    4. 编写 Build() 方法,返回值为原结构体
    type computer struct {
    	cpu string
    	arm string
    }
    type computerBuilder struct {
    	computer *computer
    }
    
    func NewComputerBuilder() *computerBuilder {
    	return &computerBuilder{computer: &computer{}}
    }
    
    func (cb *computerBuilder) setCpu(cpu string) *computerBuilder {
    	cb.computer.cpu = cpu
    	return cb
    }
    func (cb *computerBuilder) setArm(arm string) *computerBuilder {
    	cb.computer.arm = arm
    	return cb
    }
    
    func (cb *computerBuilder) Build() *computer {
    	return cb.computer
    }
    
    func main() {
    	c := NewComputerBuilder().setCpu("intel").setArm("x86").Build()
    	fmt.Println(c)
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
  • 相关阅读:
    2022广西师范大学暑期训练赛 E ,K
    Springboot+vue校园新闻网站idea
    springboot源码理解一、springboot源码环境搭建
    vue中动态设置source标签
    计算机网络——带你理解走进计算机网络
    示例:WPF中绑定枚举到ComboBox的方式
    opencv_c++学习(二十五)
    go语言牛客网专项训练-周结01
    数据库访问-records库
    day03 Docker基本使用
  • 原文地址:https://blog.csdn.net/qq_35760825/article/details/133889396