浅析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语言学习笔记、语法知识、技术要点和个人理解及实战