设计模式——Template Method模板方法

文章目录

  • 1.动机
  • 2.定义
  • 3.代码
  • 4.总结

1.动机

在软件构建过程中,对于某一项任务,它常常有稳定的整体操作结构,
但各个子步骤却有很多改变的需求,或者由于固有的原因(比如框架与应用之间的关系)
而无法和任务的整体结构同时实现。如何在确定稳定操作结构的前提下,来灵活应对各个子步骤的变化或者晚期实现需求?

2.定义

定义一个操作中的算法的骨架 (稳定),而将一些步骤延迟(变化)到子类中。
Template Method使得子类可以不改变(复用)一个算法的结构
即可重定义(override 重写)该算法的某些特定步骤。

3.代码

//程序库开发人员
class Library{
public://稳定 template methodvoid Run(){Step1();if (Step2()) { //支持变化 ==> 虚函数的多态调用Step3(); }for (int i = 0; i < 4; i++){Step4(); //支持变化 ==> 虚函数的多态调用}Step5();}virtual ~Library(){ }protected:void Step1() { //稳定//.....}void Step3() {//稳定//.....}void Step5() { //稳定//.....}virtual bool Step2() = 0;//变化virtual void Step4() =0; //变化
};
//应用程序开发人员
class Application : public Library {
protected:virtual bool Step2(){//... 子类重写实现}virtual void Step4() {//... 子类重写实现}
};int main(){Library* pLib=new Application();pLib->Run();delete pLib;}
}

4.总结

Template Method模式是一种非常基础性的设计模式,在面向对象系统中有着大量的应用。
它用最简洁的机制(虚函数的多态性)为很多应用程序框架提供了灵活的扩展点,
是代码复用方面的基本实现结构。除了可以灵活应对子步骤的变化外,“不要调用我,让我来调用你”的反向控制结构是Template Method的典型应用。在具体实现方面,被Template Method调用的虚方法可以具有实现,也可以没有任何实现(抽象方法、纯虚方法),
但一般推荐将它们设置为protected方法。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/483112.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Reparameterization Trick

目录 Sample() is not differentiableReparameterization trickToo ComplexSample() is not differentiable 现在我们得到的不是一个向量&#xff0c;得到的是一个分布&#xff0c;而分布是无法使用梯度下降的Reparameterization trick Too Complex 转载于:https://www.cnblogs…

DeepMind 打造 AI 游戏系统,可以玩扑克、国际象棋、围棋等,战斗力爆表

来源&#xff1a;AI科技大本营&#xff08;ID:rgznai100&#xff09;编译&#xff1a;禾木木谷歌母公司 Alphabet 的人工智能实验室 DeepMind 长期以来一直投资于游戏人工智能系统。实验室的理念是&#xff0c;游戏虽然缺乏明显的商业应用&#xff0c;但却是认知和推理能力的独…

OO第四单元——UML及其解析器——总结 暨 OO课程大总结

第四单元总结 第四单元主要内容是写代码解析UML&#xff0c;因此需要理解UML UML相关 starUML的储存方式是一个.mdj文件&#xff0c;通过使用文本编辑器观察这个文件&#xff0c;我们可以看出这是一个json格式储存的文件。 通过把.mdj后缀名改为.json&#xff0c;可以更加直观地…

Nature重要新发现:将运动小鼠的血液输入久坐小鼠中,可以改善大脑功能!

来源&#xff1a;生物通 斯坦福大学医学院的研究人员已经表明&#xff0c;大量锻炼的成年小鼠的血液对年龄相同、久坐不动的小鼠的大脑有益。运动小鼠血液中的一种蛋白质似乎是主要原因。Tony Wyss-Coray一项新的研究表明&#xff0c;有可能把跑马拉松的小鼠对大脑的好处转移到…

软件构造-犯错的艺术——健壮性与正确性,异常,防御式编程,debugging与test的思考与总结...

健壮性与正确性 健壮性与正确性是不同的——一个倾向于使程序尽可能保持运行&#xff0c;即使遇到错误&#xff0c;一个倾向于使程序尽可能正确&#xff0c;不在意保持运行 异常 异常分为两种——checked exception与unchecked exception 二者的区别在于&#xff1a; checked e…

Android-Note

android:installLocationApp install locationAndroidManifestApp Manifest OverviewMerge multiple manifest filesAndroidManifest详解之Application(有图更好懂)转场动画 android:windowEnterAnimationandroid:windowExitAnimationandroid:activityOpenEnterAnimationandroi…

地球系统科学简史:理解地球复杂性的多学科探索历程

来源&#xff1a;集智俱乐部作者&#xff1a;Will Steffen, Katherine Richardson等人 译者&#xff1a;晏丽 审校&#xff1a;张澳 编辑&#xff1a;邓一雪 导语我们的地球是一个有生命的有机体&#xff0c;不仅有大气、陆地、海洋之间的物理化学过程&#xff0c;生物也会对环…

设计模式——Decorator 装饰模式

文章目录1.动机2.定义3.代码4.总结1.动机 在某些情况下我们可能会“过度地使用继承来扩展对象的功能”&#xff0c;由于继承为类型引入的静态特质&#xff0c; 使得这种扩展方式缺乏灵活性&#xff1b;并且随着子类的增多&#xff08;扩展功能的增多&#xff09;&#xff0c; …

数值微分

像这样的由全部变量的偏导数汇总而成的向量称为梯度&#xff08;gradient&#xff09;&#xff0c;梯度可以像下面这样来实现,这里使用的是用数值微分求梯度的方法。 def numerical_gradient(f, x):h 1e-4 # 0.0001grad np.zeros_like(x) # 生成和x形状相同的数组for idx in …

数据结构与算法——哈希表与字符串

文章目录1.预备知识1.1 最简单的哈希——统计字符个数1.2 哈希表排序整数1.3 哈希映射的问题2.最长回文串2.1 题目描述2.2 C代码实现3.单词规律3.1 题目描述3.2 算法思路3.3 C代码实现4.字母异位词分组4.1 题目描述4.2 算法思路4.3 C代码实现5.无重复字符的最长子串5.1 题目描述…

Science重磅:DeepMind再获突破,用AI开启理解电子相互作用之路

来源&#xff1a;学术头条作者&#xff1a;青苹果编辑&#xff1a;hs排版&#xff1a;李雪薇当电子问题遇到了神经网络&#xff0c;会碰撞出什么样的火花呢&#xff1f;DeepMind 的最新研究向我们揭晓了答案。刊登在最新一期 Science 论文 Pushing the frontiers of density fu…

腾讯-地图:腾讯位置服务

ylbtech-腾讯-地图&#xff1a;腾讯位置服务1.返回顶部 2.返回顶部3.返回顶部4.返回顶部5.返回顶部 1、https://lbs.qq.com/product/miniapp/customized/2、6.返回顶部作者&#xff1a;ylbtech出处&#xff1a;http://ylbtech.cnblogs.com/本文版权归作者和博客园共有&#xff…

设计模式——Bridge 桥模式

文章目录1.动机2.定义3.代码4.总结1.动机 由于某些类型的固有的实现逻辑&#xff0c;使得它们具有两个变化的维度&#xff0c;乃至多个纬度的变化。 如何应对这种“多维度的变化”&#xff1f; 如何利用面向对象技术来使得类型可以轻松地沿着两个乃至多个方向变化&#xff0c;而…

2022年六大值得关注的边缘计算趋势

来源&#xff1a; 边缘计算社区关于边缘计算的许多方面并不新鲜&#xff0c;但它仍在快速发展。例如&#xff0c;“边缘计算”包括已经存在了几十年的分布式零售商店分支系统。这个术语也包含了当地工厂和电信提供商计算系统的各种形式&#xff0c;尽管这是一种比历史规范更紧密…

RateLimiter的 SmoothBursty(非warmup预热)及SmoothWarmingUp(预热,冷启动)

SmoothBursty 主要思想 记录 1秒内的微秒数/permitsPerSencond 时间间隔interval,每一个interval可获得一个令牌 根据允许使用多少秒内的令牌参数&#xff0c;计算出maxPermits setRate时初始化下次interval时间&#xff0c;及storedPermits acquire时&#xff0c;计算当前now…

C++学习——引用和指针

文章目录1. 引用和指针的区别&#xff1f;2. C中的指针参数传递和引用参数传递1. 引用和指针的区别&#xff1f; 指针是一个实体&#xff0c;需要分配内存空间。引用只是变量的别名&#xff0c;不需要分配内存空间。 #include<iostream> using namespace std;class sol…

未来已来:全球XR产业洞察

来源&#xff1a;德勤Deloitte编辑&#xff1a;蒲蒲近日&#xff0c;德勤中国科技、传媒和电信行业推出元宇宙系列报告《元宇宙系列白皮书—未来已来&#xff1a;全球XR产业洞察》&#xff0c;聚焦XR产业发展趋势。报告指出&#xff0c;多元融合是元宇宙的演变趋势。在元宇宙发…

C++学习——static

文章目录1. static的用法和作用&#xff1f;2.静态变量什么时候初始化1. static的用法和作用&#xff1f; 1.先来介绍它的第一条也是最重要的一条&#xff1a;隐藏。&#xff08;static函数&#xff0c;static变量均可&#xff09; 当同时编译多个文件时&#xff0c;所有未加…

谷歌、哈佛联手绘出「百万分之一」人脑神经3D连接图!天量数据竟可塞满14亿块1T硬盘...

来源&#xff1a;神经科技编辑&#xff1a;Yezi审阅&#xff1a;mingzlee7前不久&#xff0c;谷歌和哈佛大学联手发布人脑神经3D连接图&#xff0c;涵盖人脑一百万分之一的信息&#xff0c;但数据已经塞满了1400块1T硬盘&#xff01;现在&#xff0c;这个研究团队表示&#xff…

python replace()

转载于:https://www.cnblogs.com/JackFang-X/p/11090449.html