模板方法模式与策略模式的区别

2023-10-27

原文:http://www.tuicool.com/articles/6JBN7z3

如果你还不了解模板方法模式策略模式,请先阅读《 策略模式(strategy)》和《模板方法模式

模板方法模式的主要思想:定义一个算法流程,将一些特定步骤的具体实现、延迟到子类。使得可以在不改变算法流程的情况下,通过不同的子类、来实现“定制”流程中的特定的步骤。

策略模式的主要思想:使不同的算法可以被相互替换,而不影响客户端的使用。

在思想和意图上看,模板方法更加强调:
1)定义一条线(算法流程),线上的多个点是可以变化的(具体实现在子类中完成),线上的多个点一定是会被执行的,并且一定是按照特定流程被执行的。
2)算法流程只有唯一的入口,对于点的访问是受限的【通常用受保护的虚函数来定义可变点】。

策略模式更注重于: 一个“策略”是一个 整体的(完整的) 算法,算法是可以被整体替换的。而模板方法只能被替换其中的特定点,算法流程是固定不可变的。

在这样的细节上看来,模板方法 和 一组策略模式 是不可以划等号的。

在这板方法面前,似乎 “优先使用对象组合,而不是继承” 的策略模式 很是趾高气昂?我个人还是觉得、各有优缺,只是各自适应的场景不一样而已。当遇到“多个变化点独立变化”时,这时就需要策略模式来救场了,如若不然,原有架构可以很好地进行维护和扩展,那还有必要去大动干戈、非要去找到那个暂时最完美的答案吗?似乎没有吧。


附参考资料《设计模式精解》





https://blog.csdn.net/hudashi/article/details/50978969


本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

模板方法模式与策略模式的区别 的相关文章

  • jQuery实现静态html+ajax请求访问MySQL数据库并显示

    文章目录 静态html ajax与jsp ajax访问流程图 前期准备 配置jQuery 准备index html 准备dao 准备servlet jQuery实现ajax 附 关于Maven项目引入js无法使用的问题 静态html aja
  • Java并发编程与高并发解决方案(精选)

    Java并发编程与高并发面试 一 课程准备 1 1 课程导学 本课程主要是围绕并发编程和高并发解决方案两个核心来进行讲解 希望这门课程能够带领大家攻克并发编程与高并发的难题 课程特点 大量的图示及代码演示 全面覆盖并发知识点 建立完整的知识

随机推荐

  • 计算机操作系统的启动与加载过程

    注 uboot 嵌入式系统的bootloader 包含了BIOS的功能 相当于PC机的BIOS 引导程序
  • MFC的使用——在共享DLL中使用MFC、在静态库中使用MFC

    前言 我们在使用Microsoft Visual Studio软件 也就是我们常常说的VS 时 其中项目属性中有一项叫做 MFC的使用 里面包含有不同的设置 会影响我们所编写的程序的使用 今天我就遇到了这个情况 我们一起来总结一下 避免犯下
  • 数据结构——队列的C语言代码实现

    系列文章目录 数据结构 顺序表的C语言代码实现 数据结构 八种链表的C语言代码实现 数据结构 栈的C语言代码实现 数据结构 队列的C语言代码实现 数据结构 堆的C语言代码实现 文章目录 系列文章目录 前言 一 基础知识 队列的概念 queu
  • pandas时间序列

    目录 1 pandas中6个时间相关的类 2 Timestamp类 1 查看时间列 是str字符串列 还是时间格式列 2 使用pd to datetime 将字符串 转换为日期格式 3 Timestamp类只能表示1677年 2262年的时
  • js 数组移动函数

  • 使用Cloudflare和notion搭建自己的博客

    欢迎访问我的个人博客ximikang icu 使用Cloudflare和notion搭建自己的博客 使用过Nation的小伙伴一定在某个时刻冒出过这样子的想法 这个笔记应用这么好用 而且是基于Web端开发的 那为什么不可以用他来作为我自己的
  • 443. 压缩字符串_38. 外观数列

    总结 双指针统计字符串 数组中相邻字符出现的个数 统计字符串中连续数 双指针 一个i 一个j j i 1 i是所有不同的数 j记录不同数的个数 443 压缩字符串 给定一组字符 使用原地算法将其压缩 压缩后的长度必须始终小于或等于原数组长度
  • vue动态增删dom元素,实现题目选项增、删、上移、下移

  • gitee如何添加SSH公钥

    下载安装git 本文重在讲解如何添加公钥 如何安装git请自行Google 使用下列命令在命令行中生成sshkey ssh keygen t rsa C xxxxx xxxxx com 按照提示完成三次回车 即可生成 ssh key 通过查
  • Keil 进入调试之后程序不运行

    keil 进入调试之后一直不运行 但是原来工程是好的 没有变过 生产了新的板子调试不了 最后发现工程的 reset 选项放在 reset pin 上 只要改为 Normal 就可以正常调试了 目录 原来 改为 根源 原来 改为 根源 官方网
  • 搭建Flink的Scala开发环境

    搭建Flink编程开发平台 1 Flink实时处理平台是基于Scala和Java的语言来开发的 安装Java语言开发环境 1 到Oracle官网下载Java Window平台安装包 或者到学习通的资料中找Window开发工具包 在这里去下载
  • 探索精彩世界,畅享短视频直播平台

    在这个充满创意和多样化的数字时代 我们为您带来了一款引人入胜的短视频直播平台 让您尽情畅享全新的娱乐体验 我们的平台凭借丰富多样的功能和吸引人的特色 为用户呈现了一个无限可能的娱乐世界 无论您是寻找灵感 追逐潮流还是寻求纯粹的娱乐 我们的平
  • 做一个程序媛是一种什么体验?

    做一个程序媛是一种什么体验 可能很多人都觉得 身为程序媛只要有颜值就够了 或者自己颜值不行 可以介绍颜值高的女性朋友们啊 秉着 男女搭配 干活不累 的原则 一个程序媛肯定是超级吃香的 至于技术嘛 没关系 不会的话撒个娇 就会有一堆程序猿们来
  • Batch Normalization(BN)超详细解析

    单层视角 神经网络可以看成是上图形式 对于中间的某一层 其前面的层可以看成是对输入的处理 后面的层可以看成是损失函数 一次反向传播过程会同时更新所有层的权重W1 W2 WL 前面层权重的更新会改变当前层输入的分布 而跟据反向传播的计算方式
  • MATLAB 生成随机数 方法总汇 (各分布配图参考)

    目录 a 基本随机数 1 rand 2 randn b 连续型分布随机数 3 unifrnd 4 normrnd 5 chi2rnd 6 frnd 7 trnd 8 betarnd 10 gamrnd 11 lognrnd 12 raylr
  • 7.28黄金走势分析,原油操作建议,白银实时策略指导

    黄金消息面与基本面解析 周二 7月27日 金价当日上涨 主要受到美联储本周决议鸽派预期的支持 此外欧美疫情严峻增加避险需求 欧美经济复苏前景放缓等因素也是金价支持 此前 美联储6月16 17日议息会议释放了偏 鹰 信号 彼时美联储对美国经济
  • 解决unity的the type or namespace name 'ui' does not exist in the namespace 'unityengine'问题,非忘记引用导致

    我在导入某个插件后引起了这个问题 当然 并不是忘记写UnityEngine UI引起的 解决后才想着来记录一下 因此没有报错时的截图 不过问题表现为所有的UnityEngine UI的引用都报标题的错误 之前以为是UIElements的原因
  • ROS机器人建模与仿真(一)--URDF机器人建模

    前言 经过ROS的保姆级教程之后 相信大家对ROS应该有一个基本的认识了 关于各种工具的使用其实等到真正有所需求之后再去查找即可 roswiki始终是最好的最一手的信息来源 本系列的博客主要用来记录如何让在ROS的环境下进行机器人的建模与仿
  • Oracle,PL/SQL常用函数列表

    常用字符函数 函数 描述 LOWER char 将字符串表达式char中的所有大写字母转换为小写字母 UPPER char 将字符串表达式char中的所有小写字母转换为大写字母 INITCAP char 首字母转换成大写 SUBSTR ch
  • 模板方法模式与策略模式的区别

    原文 http www tuicool com articles 6JBN7z3 如果你还不了解模板方法模式和策略模式 请先阅读 策略模式 strategy 和 模板方法模式 模板方法模式的主要思想 定义一个算法流程 将一些特定步骤的具体实