浅析go语言中功能选项模式
Go语言中的功能选项模式是一种设计模式,用于在函数或方法中传递可变数量的选项。这种模式允许我们在不增加函数或方法参数的情况下,向其传递多个选项。
功能选项模式通常使用一个函数或方法,该函数或方法接受一个或多个函数类型的参数,这些函数类型的参数用于设置选项。这些函数类型的参数通常被称为选项函数。
假如要实现一个MyComputer函数,函数返回一个Computer实例,包含不同的配置选项:磁盘大小,cpu核心数,是否带GPU,冷却方式、品牌。
type Computer struct {
disk int
cpus int
gpu bool
coldStyle string
manufacturer string
}
type Option func(computer *Computer)
func MyComputer(options ...Option) *Computer {
// 默认选项
c := &Computer{
disk: 250,
cpus: 8,
gpu: true,
coldStyle: "fan",
manufacturer: "asus",
}
for _, v := range options {
v(c)
}
return c
}
func ChoiceDisk(disk int) Option {
return func(c *Computer) {
c.disk = disk
}
}
func ChoiceCpus(cpu int) Option {
return func(c *Computer) {
c.cpus = cpu
}
}
func ChoiceGpu(gpu bool) Option {
return func(c *Computer) {
c.gpu = gpu
}
}
func ChoiceClodStyle(clodStyle string) Option {
return func(c *Computer) {
c.coldStyle = clodStyle
}
}
func ChoiceManufacture(manufacture string) Option {
return func(c *Computer) {
c.manufacturer = manufacture
}
}
func main() {
// 500G硬盘,32核,不带GPU,水冷, HP
myComputer := MyComputer(
ChoiceDisk(500),
ChoiceCpus(32),
ChoiceGpu(false),
ChoiceClodStyle("water"),
ChoiceManufacture("HP"),
)
fmt.Printf("%+v\n", *myComputer)
// 不选择配置,默认
fmt.Printf("%+v\n", *MyComputer())
}
程序执行结果:
{disk:500 cpus:32 gpu:false coldStyle:water manufacturer:HP}
{disk:250 cpus:8 gpu:true coldStyle:fan manufacturer:asus}
从该例中可以看出,Computer配置选项是通过对Computer值本身进行操作的函数调用实现的,并且通过使用变长参数函数,可以任意扩展传入的配置选项的个数。
功能选项设计模式的优点:
1.固定的API,增加配置项,如增加“CPU型号”、“GPU型号”等配置,API不会变化;
2.参数可读性更好;
3.配置项高度可扩展。
Go语言基础及实战 文章被收录于专栏
Go语言学习笔记、语法知识、技术要点和个人理解及实战