设计模式:模板方法模式解析与Go语言实现

2023-11-20 15:17:46 浏览数 (1)

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. 结语

模板方法模式是一种基于继承的代码复用技术,它是一种类行为型模式。

0 人点赞