第8节 建造者模式
❤️💕💕Java和Golang的设计模式,设计模式介绍、创建者模式、结构型模式、行为型模式。Myblog:http://nsddd.top
[TOC]
建造者模式定义
建造者模式是一种创建者设计模式,它允许您创建具有不同配置的对象。这可以通过将对象的构造细节隐藏在一个单独的对象中来实现,该对象负责确定应该使用哪些参数,并返回正确配置的对象。
在Go语言中,可以使用类似于以下示例代码的结构实现建造者模式:
type Person struct {
FirstName string
LastName string
Age int
}
type PersonBuilder struct {
person Person
}
func (pb *PersonBuilder) SetFirstName(firstName string) *PersonBuilder {
pb.person.FirstName = firstName
return pb
}
func (pb *PersonBuilder) SetLastName(lastName string) *PersonBuilder {
pb.person.LastName = lastName
return pb
}
func (pb *PersonBuilder) SetAge(age int) *PersonBuilder {
pb.person.Age = age
return pb
}
func (pb *PersonBuilder) Build() *Person {
return &pb.person
}
在此示例中,PersonBuilder
结构用于存储正在构建的 Person
对象,以及设置其属性值的方法。每个方法都返回 *PersonBuilder
,这使得可以方便地链式调用多个方法,以在单个语句中设置多个属性。
最后,Build
方法返回正确配置的 Person
对象的指针。这使得可以使用单个表达式创建并初始化 Person
对象,如下所示:
person := PersonBuilder{}.
SetFirstName("John").
SetLastName("Doe").
SetAge(30).
Build()
使用此方法,可以使用清晰明了的语法创建和配置复杂的对象。
完整代码
以下是用 Go语言 编译出来的完整代码如下:
package main
import "fmt"
type Person struct {
FirstName string
LastName string
Age int
}
type PersonBuilder struct {
person Person
}
func (pb *PersonBuilder) SetFirstName(firstName string) *PersonBuilder {
pb.person.FirstName = firstName
return pb
}
func (pb *PersonBuilder) SetLastName(lastName string) *PersonBuilder {
pb.person.LastName = lastName
return pb
}
func (pb *PersonBuilder) SetAge(age int) *PersonBuilder {
pb.person.Age = age
return pb
}
func (pb *PersonBuilder) Build() *Person {
return &pb.person
}
func main() {
// 创建并初始化 Person 对象
person := PersonBuilder{}.
SetFirstName("John").
SetLastName("Doe").
SetAge(30).
Build()
fmt.Println(person.FirstName, person.LastName, "is", person.Age, "years old.")
}
为什么要使用构建者模式
使用构建者模式可以更好的帮助我们管理代码,所以,有以下的优点:
简化对象创建流程
在创建复杂对象时,有时需要执行多个步骤,例如设置属性或调用其他方法。使用构建者模式可以将这些步骤封装到单独的对象中,从而简化对象创建流程。
隐藏对象创建过程
通过将对象的创建细节隐藏在一个单独的对象中,构建者模式可以降低耦合度并提高代码的可维护性。
允许更好的控制对象创建
使用构建者模式,您可以指定要创建的对象的属性和配置选项。这使得可以轻松地扩展和修改对象创建过程。
支持链式调用
使用构建者模式可以支持链式调用语法,这使得可以在单个表达式中设置多个属性或调用多个方法。
深入刨析建造者模式
建造者模式很简单,但是在合适的场景中选择并且使用很难。
它可以将复杂的对象的构建过程与表示分离开来,使得构建过程可以有不同的表示。
简单来说,构建者模式就是将一个复杂的对象的构建过程封装起来,使得这个过程可以有不同的表示方法。
package main
import "fmt"
type Person struct {
FirstName string
LastName string
Age int
}
type Builder interface {
SetFirstName(firstName string) Builder
SetLastName(lastName string) Builder
SetAge(age int) Builder
Build() *Person
}
type PersonBuilder struct {
person Person
}
func (pb *PersonBuilder) SetFirstName(firstName string) Builder {
pb.person.FirstName = firstName
return pb
}
func (pb *PersonBuilder) SetLastName(lastName string) Builder {
pb.person.LastName = lastName
return pb
}
func (pb *PersonBuilder) SetAge(age int) Builder {
pb.person.Age = age
return pb
}
func (pb *PersonBuilder) Build() *Person {
return &pb.person
}
func main() {
// 创建并初始化 Person 对象
person := (&PersonBuilder{}).
SetFirstName("John").
SetLastName("Doe").
SetAge(30).
Build()
fmt.Println(person.FirstName, person.LastName, "is", person.Age, "years old.")
}
END 链接
✴️版权声明 © :本书所有内容遵循CC-BY-SA 3.0协议(署名-相同方式共享)©