前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >设计模式:模板方法模式解析与Go语言实现

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

作者头像
运维开发王义杰
发布2023-11-20 15:17:46
1811
发布2023-11-20 15:17:46
举报

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

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

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2023-11-19,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 运维开发王义杰 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1. 引言
    • 2. 模板方法模式的结构
      • 3. Go语言实现示例
        • 4. 模板方法模式的应用场景
          • 5. 模板方法模式的优缺点
            • 6. 结语
            领券
            问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档