- 接口Say
- 父类SayAny,实现模板中通用的方法
- 方法DoSay(Say),封装调用模板各个方法
- 子类Hello,实现各自具体逻辑
package main
import "fmt"
type Say interface { //这里定义好模板,子类需要具有的方法
beforeSay()
say()
}
type SayAny struct{}
func (SayAny) beforeSay() { //模板实现通用的方法
fmt.Println("get up the courage to say")
}
func (SayAny) say() {} //等待子类具体实现
func DoSay(say Say) { //封装,调用模板各个方法
say.beforeSay()
say.say()
}
type Hello struct {
SayAny //嵌套类型
}
func (Hello) say() {
fmt.Println("hello")
}
func main() {
var hello Hello
DoSay(hello)
}
模板模式,通用方法写一遍,子类实现各自逻辑,调用更清晰
DoSay(goodMorning)
DoSay(goLunch)
DoSay(bye)
...