一、定义

  百度百科给的定义:定义一个操作中的算法骨架(稳定),而将一些步骤延迟到子类中(变化)。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. [Codeforces375E]Red and Black Tree

    Problem 给定一棵有边权的树.树上每个点是黑或白的.黑白点能两两交换. 求符合任意一个白点到最近黑点的距离小于等于x时,黑白点交换次数最少为多少. Solution 明显是一题树形DP.我们先跑 ...

  2. EFCore Owned Entity Types,彩蛋乎?鸡肋乎?之彩蛋篇

    EFCore Owned Entity Types的定义 EFCore Owned Entity Types的文档在这里:https://docs.microsoft.com/zh-cn/ef/cor ...

  3. python 语法

    Python基础语法举例# 1 缩进和空格表示代码块# 2()连接多行print("()连接多行")str = ("uhfjfjkfj"       " ...

  4. 2018-2019-2 20175224 实验一《Java开发环境的熟悉》实验报告

    实验报告封面 实验内容与步骤 Java开发环境的熟悉-1 1.建立“自己学号exp1”的目录 2.在“自己学号exp1”目录下建立src,bin等目录 3.javac.java的执行在“自己学号exp ...

  5. git bash + gitee

    使用Git Bash从Gitee上下载代码到本地以及上传代码到码云Git: https://www.cnblogs.com/babysbreath/p/7274195.html 指定克隆远端分支 ht ...

  6. 日积月累---JVM01

    Java体系结构包括四个独立但相关的技术: Java程序设计语言 Java class文件格式 Java应用编程接口 Java虚拟机 用Java编程语言编写源代码,把它编译成Java class文件, ...

  7. zsh 缺省输入设置

    zsh 默认缺省方式和bash不兼容,终端输入指令带有* 并不能对所有以已经输入的部分作为开头的文件作处理,解决这个问题的方式是在.zshrc文件中加入 setopt no_match 即可

  8. 使用VMware 虚拟linux系统环境

    操作步骤说明: https://jingyan.baidu.com/album/f71d603782e70e1ab641d1da.html?picindex=1 vmware 克隆多个系统: http ...

  9. js循环出相同name,不同id的按钮,对其进行点击回复操作

    function getseat(){ var option= "<button class='btn'style='margin:5px;' onclick='onclickSeat ...

  10. PostgreSQL注入基础

    一般注入多用于在mssql和mysql两类数据库中,如mssql+asp.mysql+php则是最为常见的搭配环境.不同的网站应用的数据库也大不一样,根据数据库的处理能力.负载等多重因素决定.本文主要 ...