golang设计模式图解——模板方法模式

设计模式

GoF提出的设计模式有23个,包括:
(1)创建型(Creational)模式:如何创建对象;
(2)结构型(Structural )模式:如何实现类或对象的组合;
(3)行为型(Behavioral)模式:类或对象怎样交互以及怎样分配职责。

在这里插入图片描述

行为型模式

模板方法模式

模版方法模式使用继承机制,把通用步骤和通用方法放到父类中,把具体实现延迟到子类中实现。使得实现符合开闭原则。

如实例代码中通用步骤在父类中实现(煮开水冲泡倒入杯中添加酌料)煮开水和冲泡的具体实现留到子类中,并且提供 保存方法的默认实现。

因为Golang不提供继承机制,需要使用匿名组合模拟实现继承。

此处需要注意:因为父类需要调用子类方法,所以子类需要匿名组合父类的同时,父类需要持有子类的引用。

父类

package main

import "fmt"

//抽象类,制作饮料,包裹一个模板的全部实现步骤
type Beverage interface {
	BoilWater() //煮开水
	Brew()      //冲泡
	PourInCup() //倒入杯中
	AddThings() //添加酌料

	WantAddThings() bool //是否加入酌料Hook
}

//封装一套流程模板,让具体的制作流程继承且实现
type template struct {
	b Beverage
}

//封装的固定模板
func (t *template) MakeBeverage() {
	if t == nil {
		return
	}

	t.b.BoilWater()
	t.b.Brew()
	t.b.PourInCup()

	//子类可以重写该方法来决定是否执行下面动作
	if t.b.WantAddThings() == true {
		t.b.AddThings()
	}
}

子类
在这里插入图片描述
测试

func main() {
	//1. 制作一杯咖啡
	makeCoffee := NewMakeCaffee()
	makeCoffee.MakeBeverage() //调用固定模板方法

	fmt.Println("------------")

	//2. 制作茶
	makeTea := NewMakeTea()
	makeTea.MakeBeverage()
}

参考

Easy 搞定 Golang设计模式

相关推荐

  1. 设计模式-模板方法模式

    2024-04-05 09:20:05       68 阅读
  2. 设计模式模板方法模式

    2024-04-05 09:20:05       54 阅读
  3. 设计模式——模板方法模式

    2024-04-05 09:20:05       61 阅读
  4. 设计模式: 模板方法模式

    2024-04-05 09:20:05       44 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-04-05 09:20:05       98 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-04-05 09:20:05       106 阅读
  3. 在Django里面运行非项目文件

    2024-04-05 09:20:05       87 阅读
  4. Python语言-面向对象

    2024-04-05 09:20:05       96 阅读

热门阅读

  1. go并发请求url

    2024-04-05 09:20:05       33 阅读
  2. SpringAI如何集成Ollama开发AI应用

    2024-04-05 09:20:05       37 阅读
  3. react组件:profiler

    2024-04-05 09:20:05       28 阅读
  4. flutter项目ffi相关

    2024-04-05 09:20:05       37 阅读
  5. scss常用混入(mixin)、@inclue

    2024-04-05 09:20:05       36 阅读
  6. 【WPF应用33】WPF基本控件-TabControl的详解与示例

    2024-04-05 09:20:05       38 阅读
  7. Python网络爬虫(五):b站弹幕

    2024-04-05 09:20:05       38 阅读
  8. 树的前序遍历非递归思路

    2024-04-05 09:20:05       30 阅读
  9. Python爬虫入门

    2024-04-05 09:20:05       37 阅读
  10. Go语言实现Redis分布式锁

    2024-04-05 09:20:05       37 阅读
  11. CentOS运行Py脚本报错illegal instruction故障处理

    2024-04-05 09:20:05       36 阅读