创建型模式总结(三) | 青训营

37 阅读2分钟

本系列笔记总结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()
}

以上是我的一点简单理解,如果有不对的地方,还望多多指正!