本系列笔记总结23种设计模式在GO语言中的实现方法,参考了refactoringguru.cn/design-patt… 网站的内容,也包括我自己的理解。如果有理解不对的地方,恳请批评指正。
创建型设计模式
- 工厂模式
- 抽象工厂模式
- 原型模式
- 生成器模式
- 单例模式
在 创建型模式总结(一)和 创建型模式总结(二)中已经讲了四种创建型设计模式,本文讲生成器模式。
生成器模式
生成器模式通常适合类比较复杂、生成步骤较多的情况。
用组装一台电脑举例,你需要机箱、CPU、GPU、内存条、硬盘、散热和电源等组件。
每个人的需求不同,配置电脑的过程也会有所不同;此外,在这个漫长的组装过程中,如果意外使用了未组装好的电脑,就会导致错误发生。
我们可以定义一个电脑生成器computerBuilder,这个结构体实现了设置各个配件的方法setCPU()等,同时还有一个获取组装好电脑的方法getComputer()。
通常我们还可以定义一个类director(称为主管或者导演),用于指导建造过程。
以下是简单的示例:
type Computer struct { // 产品类
cpu string
gpu string
// 以及更多其他配件
}
type IBuilder interface { // 生成器接口
setCpu()
setGpu()
getComputer()
}
func getBuilder(builderType string) IBuilder {
return newComputerBuilder() // 根据条件返回生成器
}
type bestComputerBuilder struct { // 顶配电脑生成器 需要实现生成器接口
cpu string
gpu string
}
func (b *bestComputerBuilder) setCPU(){}
func (b *bestComputerBuilder) setGPU(){}
func (b *bestComputerBuilder) getComputer(){}
type Director struct { // 导演
builder IBuilder // 导演需要一个生成器配合执行建造任务
}
func (d *Director) buildComputer() Computer { // 在这里组织产品的组装过程
d.builder.setCPU()
d.builder.setGPU()
return d.builder.getComputer()
}
以上是我的一点简单理解,如果有不对的地方,还望多多指正!