模板方法模式(Template Method Pattern)是一种行为设计模式,它定义了一个操作中的算法的骨架,将一些步骤延迟到子类中。模板方法使得子类可以在不改变算法结构的情况下,重新定义算法的某些特定步骤。
模板方法模式主要涉及两个角色:
以下是使用Go语言实现模板方法模式的示例:
package main
import "fmt"
// 抽象类
type AbstractClass interface {
TemplateMethod()
PrimitiveOperation1()
PrimitiveOperation2()
}
// 模板方法
func TemplateMethod(a AbstractClass) {
a.PrimitiveOperation1()
a.PrimitiveOperation2()
}
// 具体类A
type ConcreteClassA struct{}
func (c *ConcreteClassA) PrimitiveOperation1() {
fmt.Println("ConcreteClassA Operation1")
}
func (c *ConcreteClassA) PrimitiveOperation2() {
fmt.Println("ConcreteClassA Operation2")
}
// 具体类B
type ConcreteClassB struct{}
func (c *ConcreteClassB) PrimitiveOperation1() {
fmt.Println("ConcreteClassB Operation1")
}
func (c *ConcreteClassB) PrimitiveOperation2() {
fmt.Println("ConcreteClassB Operation2")
}
func main() {
a := &ConcreteClassA{}
b := &ConcreteClassB{}
TemplateMethod(a)
TemplateMethod(b)
}
模板方法模式适用于以下场景:
优点:
缺点:
模板方法模式是一种基于继承的代码复用技术,它是一种类行为型模式。