模板方法模式的主要目的是将变化的行为与不变化的行为在不同的时间段实现并且已经定义好了对行为的算法,用于对未来进行拓展。如:把大象放入冰箱需要几步?第一步:打开冰箱;第二步:放入大象;第三部:关上冰箱。此处放入大象的步骤就是行为的算法。然后由于冰箱得到构造不同,打开的方式可能不同;但是放入大象都一样。所以虽然定义了行为的算法,但是其具体行为还不确定。可能需要未来才能进行定义具体行为,其大致代码如下:
package main
import "fmt"
// 此处为变化的具体行为
type PutElephantMode interface {
OpenFridge()
CloseFridge()
}
//定义算法
type PutElephant struct {
}
func (p *PutElephant) put() {
fmt.Println("put elephant")
}
//此处为定义的算法
func (p *PutElephant) PutElephant(putMode PutElephantMode) {
putMode.OpenFridge()
p.put()
putMode.CloseFridge()
}
// 后续实现的算法
type HaierFridge struct{}
func (*HaierFridge) OpenFridge() {
fmt.Println("open Haier fridge")
}
func (*HaierFridge) CloseFridge() {
fmt.Println("close Haier fridge")
}
func main() {
var put PutElephant
put.PutElephant(&HaierFridge{})
}
模板方法顾名思义就是方法的主体流程已经定义好了,剩下的就是在未来加入具体的实现从而完成这个流程的开发。可以极大的增强功能的可替换性。
与策略模式不同的地方在于,策略模式是行为不变,算法流程变化。而模板方法模式是算法流程不变,行为发生变化。