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

全部评论

相关推荐

11-07 13:31
怀化学院 Java
勇敢牛牛不怕难:又疯一个
点赞 评论 收藏
分享
有趣的牛油果开挂了:最近这个阶段收到些杂七杂八的短信是真的烦
点赞 评论 收藏
分享
评论
点赞
收藏
分享
牛客网
牛客企业服务