建造者模式(Builder Pattern)是一种创建型设计模式,它可以将一个复杂对象的构建过程分解为多个步骤,使得同一个构建过程可以创建不同类型的对象。建造者模式的主要优缺点如下:
优点:
缺点:
以下是建造者模式的主要组成部分和详细介绍:
建造者模式的一般结构如下:
+--------------+ +-------------------+
| Product | | AbstractBuilder |
+--------------+ +-------------------+
| part1 | | BuildPart1() |
| part2 | | BuildPart2() |
| part3 | | ... |
+--------------+ +-------------------+
| |
| |
+--------------+ +-------------------+
|ConcreteBuilder| | Director |
+--------------+ +-------------------+
| product |<----------| Construct() |
+--------------+ +-------------------+建造者模式的使用步骤如下:
以下是一个简单的Go示例:
package main
import "fmt"
// Product
type Computer struct {
CPU string
RAM string
Storage string
}
// Builder interface
type ComputerBuilder interface {
SetCPU(cpu string)
SetRAM(ram string)
SetStorage(storage string)
Build() *Computer
}
// ConcreteBuilder
type BasicComputerBuilder struct {
computer *Computer
}
func NewBasicComputerBuilder() *BasicComputerBuilder {
return &BasicComputerBuilder{computer: &Computer{}}
}
func (b *BasicComputerBuilder) SetCPU(cpu string) {
b.computer.CPU = cpu
}
func (b *BasicComputerBuilder) SetRAM(ram string) {
b.computer.RAM = ram
}
func (b *BasicComputerBuilder) SetStorage(storage string) {
b.computer.Storage = storage
}
func (b *BasicComputerBuilder) Build() *Computer {
return b.computer
}
// Director
type ComputerManufacturer struct {
builder ComputerBuilder
}
func NewComputerManufacturer(builder ComputerBuilder) *ComputerManufacturer {
return &ComputerManufacturer{builder: builder}
}
func (m *ComputerManufacturer) Construct() *Computer {
m.builder.SetCPU("Intel i5")
m.builder.SetRAM("8GB")
m.builder.SetStorage("256GB SSD")
return m.builder.Build()
}
func main() {
basicBuilder := NewBasicComputerBuilder()
manufacturer := NewComputerManufacturer(basicBuilder)
basicComputer := manufacturer.Construct()
fmt.Println("Basic Computer Specs:")
fmt.Printf("CPU: %s\nRAM: %s\nStorage: %s\n", basicComputer.CPU, basicComputer.RAM, basicComputer.Storage)
}我正在参与2024腾讯技术创作特训营第五期有奖征文,快来和我瓜分大奖!
声明:本作品采用署名-非商业性使用-相同方式共享 4.0 国际 (CC BY-NC-SA 4.0)进行许可,使用时请注明出处。
blog: mengbin
Github: mengbin92
cnblogs: 恋水无意
腾讯云开发者社区:孟斯特
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。