当前位置: 首页 > news >正文

【设计模式】第24节:行为型模式之“模板方法模式”

一、简介

模板方法模式在一个方法中定义一个算法骨架,并将某些步骤推迟到子类中实现。模板方法模式可以让子类在不改变算法整体结构的情况下,重新定义算法中的某些步骤。

模板模式有两大作用:复用和扩展。其中,复用指的是,所有的子类可以复用父类中提供的模板方法的代码。扩展指的是,框架通过模板模式提供功能扩展点,让框架用户可以在不修改框架源码的情况下,基于扩展点定制化框架的功能。

二、优点

  • 代码复用
  • 统一算法框架
  • 封装不变,扩展可变

三、适用场景

  • 一次性实现算法的不变部分
  • 集中公共行,避免代码重复

四、UML类图

请添加图片描述

五、案例

有下棋和足球两种游戏,它们的游玩过程类似,都是分为初始化、玩游戏、结束游戏三步。

package mainimport "fmt"type Game interface {InitializeGame()PlayGame()EndGame()
}func Play(game Game) {game.InitializeGame()game.PlayGame()game.EndGame()
}type Chess struct {
}func NewChess() *Chess {return &Chess{}
}func (c *Chess) InitializeGame() {fmt.Println("Initializing Chess Game")
}func (c *Chess) PlayGame() {fmt.Println("Playing Chess Game")
}func (c *Chess) EndGame() {fmt.Println("Ending Chess Game")
}type Football struct {
}func NewFootball() *Football {return &Football{}
}func (f *Football) InitializeGame() {fmt.Println("Initializing Football Game")
}func (f *Football) PlayGame() {fmt.Println("Playing Football Game")
}func (f *Football) EndGame() {fmt.Println("Ending Football Game")
}func main() {chess := NewChess()Play(chess)football := NewFootball()Play(football)
}
http://www.lryc.cn/news/217659.html

相关文章:

  • 【考研数学】数学“背诵手册”(二)| 线代及概率论部分
  • Android WMS——WindowState介绍(十三)
  • C/C++网络编程基础知识超详细讲解第二部分(系统性学习day12)
  • 【教3妹学编程-算法题】117. 填充每个节点的下一个右侧节点指针 II
  • window10 mysql8.0 修改端口port不生效
  • 欧盟网络安全威胁:虚假与错误信息
  • 006 Linux 进程的概念 | 获取进程的PID
  • 时序预测 | Python实现ARIMA-CNN-LSTM差分自回归移动平均模型结合卷积长短期记忆神经网络时间序列预测
  • 《异常检测——从经典算法到深度学习》23 TimesNet: 用于常规时间序列分析的时间二维变化模型
  • 计算机网络(59)
  • 【CSS】CSS基础知识扫盲
  • React中的状态管理
  • 【优选算法系列】【专题九链表】第一节.链表常用技巧和操作总结(2. 两数相加)
  • 上线Spring boot-若依项目
  • pinia简单使用
  • 数据库进阶教学——数据库故障恢复(日志文件)
  • Leetcode 73 矩阵置0
  • Rust学习日记(二)变量的使用--结合--温度换算/斐波那契数列--实例
  • html各个标签的使用
  • android 混淆
  • 旋转链表(C++解法)
  • AcWing 134:双端队列
  • Spring Cloud Gateway 重写 URL
  • 【C语法学习】10 - scanf()函数
  • ffmpeg mp3截取命令,视频与mp3合成带音频视频命令
  • 文件夹还在,里面文件没了?问题这样解决
  • 使用 OpenCV 和 Tesseract OCR 进行车牌识别
  • What exactly are the practices involved in DevOps?
  • Spring底层原理(五)
  • 算法的基本概念(数据结构与算法)