建设者
构建器模式是一种创造性的设计模式,它为逐步构建复杂对象提供了灵活的解决方案。它允许您使用相同的构造过程创建对象的不同表示。
问题陈述
- 当创建一个对象涉及多个步骤或参数时,管理构建过程可能会变得很麻烦。
- 您希望避免“伸缩构造函数”问题(构造函数采用许多参数)并确保您的对象在创建后不可变。
构建器模式的好处
- 灵活性:轻松构建对象的不同表示。
- 可读性:方法链式使构建过程清晰简洁。
- 封装:构造逻辑封装在构建器中,与客户端代码分离。
现实世界的例子
考虑建造一台计算机。计算机可以有各种组件,如 cpu、ram、存储等。
构建器模式不需要在构造函数中要求所有这些参数,而是允许您逐步设置每个组件。
执行
package main import "fmt" // Product type Computer struct { CPU string RAM string Storage string OS string } // Builder Interface type ComputerBuilder interface { SetCPU(cpu string) ComputerBuilder SetRAM(ram string) ComputerBuilder SetStorage(storage string) ComputerBuilder SetOS(os string) ComputerBuilder Build() *Computer } // Concrete Builder type PCBuilder struct { computer *Computer } func NewPCBuilder() *PCBuilder { return &PCBuilder{&Computer{}} } func (b *PCBuilder) SetCPU(cpu string) ComputerBuilder { b.computer.CPU = cpu return b } func (b *PCBuilder) SetRAM(ram string) ComputerBuilder { b.computer.RAM = ram return b } func (b *PCBuilder) SetStorage(storage string) ComputerBuilder { b.computer.Storage = storage return b } func (b *PCBuilder) SetOS(os string) ComputerBuilder { b.computer.OS = os return b } func (b *PCBuilder) Build() *Computer { return b.computer } // Client Code func main() { builder := NewPCBuilder() computer := builder. SetCPU("Intel i7"). SetRAM("16GB"). SetStorage("1TB SSD"). SetOS("Windows 7"). Build() fmt.Printf("Computer built: %+vn", computer) }
产品(计算机):表示将使用各种属性构建的复杂对象。
builder 接口(computerbuilder):定义设置产品每个组件的方法。
具体构建器(pcbuilder):实现构建器接口。
- 提供设置cpu、ram、存储和操作系统的方法,返回构建器本身以进行方法链接。
- build() 方法返回最终的 computer 对象。
客户端代码:创建一个新的构建器实例。
- 使用方法链逐步配置计算机。
- 调用 build() 来检索最终产品。
以上就是Go 设计模式#Builder的详细内容,更多请关注php中文网其它相关文章!
版权声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系 yyfuon@163.com