Go设计模式:模板模式

模板模式,大家猜猜是什么?其实我们天天用,离我们最近的就是面向对象里的继承。模板的作用是什么呢?是框定一个框架,但是 不填充具体细节,细节由具体的子类来完成,举个例子,如果我们想写一个短信系统,他要对接各种第三方短信,但是其实大家 都知道,发短信,大家接口不一样而已,实际上他们可以抽象成相同的流程:

package main

import (
	"fmt"
)

type SMSSender struct{}

func (s *SMSSender) Send(content string, receivers []string) {
	panic("not implement yet")
}

type AliyunSMS struct {
	SMSSender
}

func (a *AliyunSMS) Send(content string, receivers []string) {
	fmt.Printf("阿里云发短信的各种API调用")
}

type TencentSMS struct {
	SMSSender
}

func (t *TencentSMS) Send(content string, receivers []string) {
	fmt.Printf("腾讯云发短信的各种API调用")
}

瞧,他们就像一颗倒过来的树:

                SMSSender

            /                \
        AliyunSMS          TencentSMS

SMSSender 规定了有这么一个方法,而 AliyunSMSTencentSMS 才是细节实现者,这就是传统的面向对象范式里的继承。

所以模板模式并不是什么新奇玩意儿,原来只是我们的老朋友(上述例子中,Go语言里,更好的实现是使用interface)。


更多文章
  • AWS IAM 信任链 和 EKS IRSA
  • AI 会取代你的(编程)岗位吗?
  • 2024年终总结
  • 自建DERP服务器提升Tailscale连接速度(使用Nginx转发)
  • 自动升级Docker容器
  • 再读《程序员修炼之道-从小工到专家》
  • 让浏览器下载文件
  • 再读《软件随想录》/《黑客与画家》/《软技能》
  • HTTP 压力测试中的 Coordinated Omission
  • 2的补码
  • 编程语言中的 context 是什么?
  • flutter macOS 构建出错
  • Flatpak 使用小记
  • Golang CAS 操作是怎么实现的
  • PostgreSQL 当MQ来使用