一、定义

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

  如何做到将一些步骤延迟到子类中?就是用虚函数,子类进行实现。

  说白了,就是把主程序写到父类文件中,部分子程序写到子类文件中,达到了算法可以灵活变化,且本体不需要进行改变的效果。

二、为什么要用模板方法

  用代码说话:没使用模板方法前

//程序库开发人员
class Library
{ public:
void Step1(){
//...
} void Step3(){
//...
} void Step5(){
//...
}
} //应用程序开发人员
class Application
{ public:
bool Step2(){
//...
} void Step4(){
//...
}
} int main()
{
Library lib();
Application app(); //算法主体代码
lib.Step1(); if(app.Step2())
{
lib.Step3();
} for(int i=; i<; i++)
{
app.Step4();
} app.Step5();
}

  很简单的代码,这段代码不一定是分开两个人来写,也有可能是同一个写或多个人来写,这里无所谓。

  一般来说,程序库开发人员的代码写的比较早,这些代码是稳定的,不会进行改变的。而应用程序开发人员的代码写的比较晚,这些代码是随需求变化而变化的。

  一般来说,算法主体代码也是稳定的,不会变的。但如果由应用程序开发人员来写,一,他需要懂这个算法具体如何实现,且能正确的写出来;二,如果多个地方用到了这个算法,岂不是要写这个算法很多次?代码复用率低。

  然后我们来看下使用模板方法后的代码:

//程序库开发人员
class Library
{ public: void Run(){
//算法主体代码
Step1(); if(Step2())
{
Step3();
} for(int i=; i<; i++)
{
Step4();
} Step5();
} virtual ~Library(){}//虚析构函数 protected: void Step1(){ //稳定
//...
} void Step3(){ //稳定
//...
} void Step5(){ //稳定
//...
} virtual bool Step2() = ; //变化
virtual void Step4() = ; //变化
} //应用程序开发人员
class Application
{ public:
virtual bool Step2(){
//子类重实现变化部分
} virtual void Step4(){
//子类重实现变化部分
}
} int main()
{
Library* lib = new Application();
lib.Run(); delete lib;
}

  使用了模板方法后,算法的实现是由程序库开发人员写的,他可以保证算法的正确性。后续想用此算法的人,只需根据需求重写一下变化部分,即可轻松调用,代码的复用性和准确性得到了保证。

参考视频:https://www.bilibili.com/video/av22292899/?p=3(PS: B站真是一个学习的好地方>_<!)

设计模式—模板方法(template method)的更多相关文章

  1. 一天一个设计模式——模板方法(Template Method)模式

    一.模式说明 现实世界中的模板是用于将事物的结构规律予以固定化.标准化的成果,它体现了结构形式的标准化.例如镂空文字印刷的模板,通过某个模板印刷出来的文字字体大小都是一模一样,但是具体使用什么材质的颜 ...

  2. C#设计模式——模板方法(Template Method)

    一.概述在软件开发中,对某一项操作往往有固定的算法结构,而具体的子步骤会因为不同的需要而有所不同.如何可以在稳定算法结构的同时来灵活应对子步骤变化的需求呢?二.模板方法模板方法是一种常见的设计模式,它 ...

  3. 设计模式:模板方法(Template method)

    首先我们先来看两个例子:冲咖啡和泡茶.冲咖啡和泡茶的基本流程如下: 所以用代码来创建如下: 咖啡:Caffee.java public class Coffee { void prepareRecip ...

  4. 宋宝华:Linux设备驱动框架里的设计模式之——模板方法(Template Method)

    本文系转载,著作权归作者所有.商业转载请联系作者获得授权,非商业转载请注明出处. 作者: 宋宝华 来源: 微信公众号linux阅码场(id: linuxdev) 前言 <设计模式>这本经典 ...

  5. 设计模式(22)--Template Method(模板方法模式)--行为型

    作者QQ:1095737364    QQ群:123300273     欢迎加入! 1.模式定义: 模板方法模式是类的行为模式.准备一个抽象类,将部分逻辑以具体方法以及具体构造函数的形式实现,然后声 ...

  6. 行为型设计模式之模板方法(TEMPLATE METHOD)模式 ,策略(Strategy )模式

    1 模板方法(TEMPLATE METHOD)模式: 模板方法模式把我们不知道具体实现的步聚封装成抽象方法,提供一些按正确顺序调用它们的具体方法(这些具体方法统称为模板方法),这样构成一个抽象基类.子 ...

  7. 模板方法(Template Method)(父类声明算法骨架,子类具体不同实现)

    在阎宏博士的<JAVA与模式>一书中开头是这样描述模板方法(Template Method)模式的: 模板方法模式是类的行为模式.准备一个抽象类,将部分逻辑以具体方法以及具体构造函数的形式 ...

  8. 设计模式 : Template method 模板方法模式 -- 行为型

      设计模式中,模板模式面向的是方法级别的流程.(不过好像世界上大部分问题,都可以抽象点.抽象点吧,最后抽象到一个方法里面吧.) 1. 一个方法,可以用来描述一个流程,这个流程涉及多个环节,不同环节可 ...

  9. 设计模式二--模板方法Template method

    模式分类: 书籍推荐:重构-改善既有代码的设计 重构获得模式 设计模式:现代软件设计的特征是"需求的频繁变化".设计模式的要点是 "寻找变化点,然后在变化点处应用设计模式 ...

  10. 设计模式之---模板方法template method的使用

    在面向对象系统的分析与设计过程中经常会遇到这样一种情况:对于某一个业务逻辑(算法实现)在不同的对象中有不同的细节实现,但是逻辑(算法)的框架(或通用的应用算法)是相同的.Template Method ...

随机推荐

  1. Python-接口自动化(四)

    python基础知识(四) (四)处理文件 a.文件的格式主要有txt.html.xml,接下来主要讲的是txt格式的文件处理 对文件进行读写等操作会用到的函数是open(),第一个参数file是指传 ...

  2. bash配色

    Table of Contents PS1格式 基本格式 其它可能的格式 PS1配色方案 配置文件 bash的命令提示符和终端外观由环境变量PS1定义 PS1格式 基本格式 \u 显示当前用户名 \h ...

  3. python识别图片中的代码。

    在看并发编程网的时候,有些示例代码是以图片的形式出现的,要是此时自己想复制下来的话,只能对着图片敲了,很不爽,于是搜了一下识别图片的网站,有! 把图片上传上去解析,下来txt文本,打开一看,大部分能解 ...

  4. 常见图片格式PNG,JPEG,BMP,GIF区别总结

    在前端工作久了经常会遇到各种格式的图片文件,现文做一些区别总结,帮助理解但不深入. [PNG](Portable Network Graphics) PNG是一种无损压缩的位图图形格式,主要有PNG8 ...

  5. vue实现pc端上拉加载功能,不兼容移动端

    所用插件:Mock.js 这个只用到它简单的功能,拦截ajax请求. vue和axios,vue基础知识请看文档. axios类似于jquery的ajax方法. 以下是是该功能所有代码,其中mock的 ...

  6. java LRUCache

    package org.rx.cache; import org.rx.common.*; import org.rx.beans.DateTime; import java.util.Collect ...

  7. JS中的一元操作符

    表达式 一元操作符 优先级 结合性 运算顺序 表达式是什么? 就是JS 中的一个短语,解释器遇到这个短语以后会把对它进行计算,得到一个结果参与运算,我们把这种要参与到运算中的各种各样的短语称为表达式. ...

  8. makefile笔记3 - makefile规则

    target ... : prerequisites ... command ... ... 规则包含两个部分,一个是依赖关系,一个是生成目标的方法. 在 Makefile 中,规则的顺序是很重要的, ...

  9. 马凯军201771010116《面向对象与程序设计Java》第十周学习总结

    一.理论知识学习部分 泛型类的约束与局限性: 不能用基本类型实例化类型参数 运行时类型查询只适用于原始类型 不能抛出也不能捕获泛型类实例 参数化类型的数组不合法 不能实例化类型变量 泛型类的 ...

  10. java版数据结构与算法 (1综述)

    很大部分转载自 https://blog.csdn.net/singit/article/details/54898316 数据的逻辑结构:反映数据元素之间的逻辑关系的数据结构,其中的逻辑关系指数据元 ...