定义:

  定义一个操作中算法的骨架,而将一些步骤延迟到子类中,使得子类可以不改变算法的结构即可重定义该算法中的某些特定步骤。这里的算法的结构,可以理解为你根据需求设计出来的业务流程。特定的步骤就是指那些可能在内容上存在变数的环节。

  开闭原则是指一个软件实体应该对扩展开放,对修改关闭。也就是说软件实体必须是在不被修改的情况下被扩展。模板方法模式意图是由抽象父类控制顶级逻辑,并把基本操作的实现推迟到子类去实现,这是通过继承的手段来达到对象的复用,同时也遵守了开闭原则!

类图:

  模板方法模式需要开发抽象类和具体子类的设计师之间的协作。一个设计师负责给出一个算法的轮廓和骨架,另一些设计师则负责给出这个算法的各个逻辑步骤。代表这些具体逻辑步骤的方法称做基本方法(primitive method);而将这些基本方法汇总起来的方法叫做模板方法(template method),这个设计模式的名字就是从此而来。

  模板方法所代表的行为称为顶级行为,其逻辑称为顶级逻辑。模板方法模式的静态结构图如下所示:

aaarticlea/png;base64,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" alt="" width="317" height="375" />

  这里涉及到两个角色:

  抽象模板(Abstract Template)角色有如下责任:

  ■  定义了一个或多个抽象操作,以便让子类实现。这些抽象操作叫做基本操作,它们是一个顶级逻辑的组成步骤。

  ■  定义并实现了一个模板方法。这个模板方法一般是一个具体方法,它给出了一个顶级逻辑的骨架,而逻辑的组成步骤在相应的抽象操作中,推迟到子类实现。顶级逻辑也有可能调用一些具体方法

  具体模板(Concrete Template)角色又如下责任:

  ■  实现父类所定义的一个或多个抽象方法,它们是一个顶级逻辑的组成步骤。

  ■  每一个抽象模板角色都可以有任意多个具体模板角色与之对应,而每一个具体模板角色都可以给出这些抽象方法的不同实现,从而使得顶级逻辑的实现各不相同。

源代码

  抽象模板角色类,abstractMethod()、hookMethod()等基本方法是顶级逻辑的组成步骤,这个顶级逻辑由templateMethod()方法代表。

public abstract class AbstractTemplate {
/**
* 模板方法
*/
public void templateMethod(){
//调用基本方法
abstractMethod();
hookMethod();
concreteMethod();
}
/**
* 基本方法的声明(由子类实现)
*/
protected abstract void abstractMethod();
/**
* 基本方法(空方法)
*/
protected void hookMethod(){}
/**
* 基本方法(已经实现)
*/
private final void concreteMethod(){
//业务相关的代码
}
}

  具体模板角色类,实现了父类所声明的基本方法,abstractMethod()方法所代表的就是强制子类实现的剩余逻辑,而hookMethod()方法是可选择实现的逻辑,不是必须实现的。

public class ConcreteTemplate extends AbstractTemplate{
//基本方法的实现
@Override
public void abstractMethod() {
//业务相关的代码
}
//重写父类的方法
@Override
public void hookMethod() {
//业务相关的代码
}
}

模板方法模式中的方法

  模板方法中的方法可以分为两大类:模板方法和基本方法。

  模板方法

  一个模板方法是定义在抽象类中的,把基本操作方法组合在一起形成一个总算法或一个总行为的方法。

  一个抽象类可以有任意多个模板方法,而不限于一个。每一个模板方法都可以调用任意多个具体方法。

  (是骨架,一般是具体方法,实现对基本方法的调度,完成固定的逻辑,为了防止恶意操作,一般模板方法会加上final关键字,不允许被覆写)。

  基本方法

  基本方法定义了一个或多个抽象操作,以便让子类实现。

  基本方法又可以分为三种:抽象方法(Abstract Method)、具体方法(Concrete Method)和钩子方法(Hook Method)。

  ●  抽象方法:一个抽象方法由抽象类声明,由具体子类实现。在Java语言里抽象方法以abstract关键字标示。

  ●  具体方法:一个具体方法由抽象类声明并实现,而子类并不实现或置换。

  ●  钩子方法:一个钩子方法由抽象类声明并实现,而子类会加以扩展。通常抽象类给出的实现是一个空实现,作为方法的默认实现。

  在上面的例子中,AbstractTemplate是一个抽象类,它带有三个方法。其中abstractMethod()是一个抽象方法,它由抽象类声明为抽象方法,并由子类实现;hookMethod()是一个钩子方法,它由抽象类声明并提供默认实现,并且由子类置换掉。concreteMethod()是一个具体方法,它由抽象类声明并实现。

  默认钩子方法

  一个钩子方法常常由抽象类给出一个空实现作为此方法的默认实现。这种空的钩子方法叫做“Do Nothing Hook”。显然,这种默认钩子方法在缺省适配模式里面已经见过了,一个缺省适配模式讲的是一个类为一个接口提供一个默认的空实现,从而使得缺省适配类的子类不必像实现接口那样必须给出所有方法的实现,因为通常一个具体类并不需要所有的方法。

命名规则

  命名规则是设计师之间赖以沟通的管道之一,使用恰当的命名规则可以帮助不同设计师之间的沟通。

  钩子方法的名字应当以do开始,这是熟悉设计模式的Java开发人员的标准做法。在上面的例子中,钩子方法hookMethod()应当以do开头;在HttpServlet类中,也遵从这一命名规则,如doGet()、doPost()等方法。

模板方法模式在Servlet中的应用

  使用过Servlet的人都清楚,除了要在web.xml做相应的配置外,还需继承一个叫HttpServlet的抽象类。HttpService类提供了一个service()方法,这个方法调用doPost()、doGet()、doPut()、doDelete()、doHead()……七个do方法中的一个或几个,完成对客户端调用的响应。这些do方法在HttpServlet抽象类中都是以空实现的钩子方法存在的,需要由具体子类提供,因此这是典型的模板方法模式。

 下面给出一个简单的Servlet例子:

    aaarticlea/png;base64,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" alt="" />

  从上面的类图可以看出,TestServlet类是HttpServlet类的子类,并且置换掉了父类的两个方法:doGet()和doPost()。

public class TestServlet extends HttpServlet {

    public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException { System.out.println("using the GET method"); } public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException { System.out.println("using the POST method");
} }

  从上面的例子可以看出这是一个典型的模板方法模式。

  HttpServlet担任抽象模板角色

    模板方法:由service()方法担任。

    基本方法:由doPost()、doGet()等方法担任。

  TestServlet担任具体模板角色

    TestServlet置换掉了父类HttpServlet中七个基本方法中的其中两个,分别是doGet()和doPost()。

参考来自:

http://www.cnblogs.com/java-my-life/archive/2012/05/14/2495235.html

http://blog.163.com/java_player@126/blog/static/127930738200981555022398/

http://blog.csdn.net/zhangliangzi/article/details/51475133

 

java_设计模式_模板方法模式_Template Method Pattern(2016-08-11)的更多相关文章

  1. 乐在其中设计模式(C#) - 模板方法模式(Template Method Pattern)

    原文:乐在其中设计模式(C#) - 模板方法模式(Template Method Pattern) [索引页][源码下载] 乐在其中设计模式(C#) - 模板方法模式(Template Method ...

  2. 二十四种设计模式:模板方法模式(Template Method Pattern)

    模板方法模式(Template Method Pattern) 介绍定义一个操作中的算法的骨架,而将一些步骤延迟到子类中.Template Method使得子类可以不改变一个算法的结构即可重定义该算法 ...

  3. 设计模式 - 模板方法模式(template method pattern) JFrame 具体解释

    模板方法模式(template method pattern) JFrame 具体解释 本文地址: http://blog.csdn.net/caroline_wendy 參考模板方法模式(templ ...

  4. 设计模式 - 模板方法模式(template method pattern) 排序(sort) 具体解释

    模板方法模式(template method pattern) 排序(sort) 具体解释 本文地址: http://blog.csdn.net/caroline_wendy 參考模板方法模式(tem ...

  5. 设计模式 - 模板方法模式(template method pattern) 具体解释

    模板方法模式(template method pattern) 详细解释 本文地址: http://blog.csdn.net/caroline_wendy 模板方法模式(template metho ...

  6. 模板方法模式(Template Method Pattern)——复杂流程步骤的设计

    模式概述 在现实生活中,很多事情都包含几个实现步骤,例如请客吃饭,无论吃什么,一般都包含点单.吃东西.买单等几个步骤,通常情况下这几个步骤的次序是:点单 --> 吃东西 --> 买单. 在 ...

  7. 设计模式(九): 从醋溜土豆丝和清炒苦瓜中来学习"模板方法模式"(Template Method Pattern)

    今天是五.四青年节,祝大家节日快乐.看着今天这标题就有食欲,夏天到了,醋溜土豆丝和清炒苦瓜适合夏天吃,好吃不上火.这两道菜大部分人都应该吃过,特别是醋溜土豆丝,作为“鲁菜”的代表作之一更是为大众所熟知 ...

  8. java_设计模式_工厂模式_Factory Pattern(2016-08-04)

    工厂模式主要是为创建对象提供了接口.工厂模式按照<Java与模式>中的提法分为三类: (1)简单工厂(Simple Factory)模式,又称静态工厂方法模式(Static Factory ...

  9. 模板方法模式(Tempalte Method Pattern)

    模板方法模式是类的行为模式.准备一个抽象类,将部分逻辑以具体方法以及具体构造函数的形式实现,然后声明一些抽象方法来迫使子类实现剩余的逻辑.不同的子类可以以不同的方式实现这些抽象方法,从而对剩余的逻辑有 ...

随机推荐

  1. android日历控件(一)

    自定义日历并且具备设置今天以前的时间不可点选,以前的颜色和当前的颜色不同,以及获取两次点击日期之间间隔的天数所以说细节比较多 个人习惯,先上图 靠,笔记本不知道怎么回事,禁用到触摸板之后 再次唤醒屏幕 ...

  2. [Linux&Vim]输入输出流

    流不尽,东逝水 关于流,以前大致知道有这样三个概念:标准输入流(stdin).标准输出流(stdout)和错误输出流(stderr). 什么是流,做什么用的,怎么个用法? 基本概念下面这篇文章讲得已经 ...

  3. Unity FisheyeShader using Spherical Mapping

    Shader "Hidden/FisheyeShader" { Properties { _MainTex ("Base (RGB)", 2D) = " ...

  4. 使用Sql按日期条件查询

    --查询当天(1: select * from ShopOrder where datediff(day,ordTime,getdate()-1)=0 --查询当天(2:select * from i ...

  5. vijosP1067Warcraft III 守望者的烦恼

    vijosP1067Warcraft III 守望者的烦恼 链接:https://vijos.org/p/1067 [思路] 矩阵乘法. 可以得出递推式:      f[i]=sum{ f[n-1], ...

  6. QT静态链接

    想把QT的程序链接成一个独立的EXE以方便使用,查了很多资料都需要自行编译QT. 搜索了很多的资料,发篇写得比较简明一些:http://my.oschina.net/weiweiqiao/blog/2 ...

  7. hdu 4620 搜索

    好苦逼,为啥数组开小了,不会runtime error,还得我WA了几个小时,我泪流满面. 题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4620 #i ...

  8. [置顶] SpecDD系列:“完成” 的定义

    在当今充满变数和快节奏的大环境下,一个产品的上市时间已经成为产品成功与否的重要因素.如果对于“完成”没有一个清晰的定义,那么很可能会遭遇产品延期,风险,并且增加公司成本. “完成的定义”也被俗称为Do ...

  9. oracle从客户端到sql语句追踪

    这两天看小布老师的视频学习了一下从客户端到oracle数据库发送执行的SQL语句的跟踪,整理一下笔记. 需要用到的命令:netstat oracle端要用到的四个视图为: V$session:当前有多 ...

  10. 树莓派安装mjpg-streamer视频监控 分类: Raspberry Pi 2015-04-12 23:41 144人阅读 评论(0) 收藏

    原来使用Motion在树莓派上跑1280x720分辨率的三颗摄像头.占用内存太严重,关闭诸多功能之后还是不行.故转战mjpg-streamer. 首先安装所需软件 sudo apt-get insta ...