1. 引言
模板方法模式(Template Method Pattern)是一种行为设计模式,它定义了一个操作中的算法的骨架,将一些步骤延迟到子类中。模板方法使得子类可以在不改变算法结构的情况下,重新定义算法的某些特定步骤。
2. 模板方法模式的结构
模板方法模式主要涉及两个角色:
- 抽象类(Abstract Class):定义模板方法,声明算法的步骤。
- 具体类(Concrete Class):实现抽象类中定义的一个或多个步骤。
3. Go语言实现示例
以下是使用Go语言实现模板方法模式的示例:
代码语言:javascript复制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)
}
4. 模板方法模式的应用场景
模板方法模式适用于以下场景:
- 一次性实现一个算法的不变的部分,并将可变的行为留给子类来实现。
- 各子类中的公共行为被提取出来并集中到一个公共父类中,从而避免代码重复。
5. 模板方法模式的优缺点
优点:
- 提高代码复用性。
- 提高扩展性。
- 符合开闭原则。
缺点:
- 类数目的增加。
- 增加了系统实现的复杂度。
- 继承机制的缺点,如果父类添加新的抽象方法,所有子类都要改一遍。
6. 结语
模板方法模式是一种基于继承的代码复用技术,它是一种类行为型模式。