java设计模式(9):模板方法模式(TemplateMethod)
一,定义:模板方法模式定义了一个操作中的算法骨架,而将一些步骤延迟到子类中。模板方法使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。
二,类图:
三,通过小例子讲解:
这个模式一般用在程序的步骤比较多,而且有固定的模式,固定的步骤,而每一步的实现又有多种情况,这是我们可以使用TemplateMethod模式。这样可以保证算法骨架的正确性,又将多态运用的非常好。
这里举个人一天要做的事情吧,假如一个人一天要有起床,吃饭,做事情,睡觉四个事项。
1,首先我们看模板类:
- /**
- * 模板方法设计模式中的“模板类”
- * 一般情况下模板类都是一个抽象类
- */
- public abstract class PersonDay {
- /**
- * 在模板方法中编写核心算法,这个算法是不会改变的,这个算法被子类继承,可以得到复用。
- * 模板方法的流程一般不让子类覆盖,不希望子类去重新定义核心算法,所以模板方法通常被final修饰
- */
- public final void day(){
- doGetUp();
- doEatBreakfast();
- doSome();
- doSleep();
- }
- //将行为的具体实现延迟到子类中完成,达到不同的实现效果。
- public abstract void doGetUp();
- public abstract void doEatBreakfast();
- public abstract void doSome();
- public abstract void doSleep();
- }
2,我们来看学生类:
- public class StudentDay extends PersonDay{
- //学生起床
- public void doGetUp(){
- System.out.println("学生起床了,准备上学了")
- }
- //吃早餐
- public void doEatBreakfast(){
- System.out.println("学生吃早餐:牛奶、面包");
- }
- //上学
- public void doSome(){
- System.out.println("学生上课学习");
- }
- //睡觉
- public void doSleep(){
- System.out.println("学生做完功课睡觉");
- }
- }
3,我们来看老师类:
- public class StudentDay extends PersonDay{
- //老师起床
- public void doGetUp(){
- System.out.println("老师起床了,安顿好家人,准备到学校工作")
- }
- //吃早餐
- public void doEatBreakfast(){
- System.out.println("老师早餐:小米粥、油条");
- }
- //教学
- public void doSome(){
- System.out.println("老师上课教学");
- }
- //睡觉
- public void doSleep(){
- System.out.println("老师备完功课睡觉");
- }
- }
其它子类…………
4,看一下测试类,非常简单:
- public class Test {
- public static void main(String[] args) {
- //父类指向子类
- PersonDay d1 = new StudentDay();
- d1.day();
- PersonDay d2 = new WorkerDay();
- d2.day();
- }
- }
- </span>
分析总结:这样我们就利用模板方法完成了这个实例,我们来分析其中的特点吧:
1,将不变的核心算法行为搬移到了父类,去除了子类中的重复代码,并保证了算法的正确性,因为就在父类中写了一次。
2,具体步骤的下放,使多态体现了其中的优势,使代码的扩展性更高!
四,应用:
大家都知道在我们编写Servlet之前需要我们将之在web.xml中进行配置,这样我们才能在jsp向Servlet中传递数据,并从之获取数据,才能完成我们网页的动态显示。但是随着功能的增多,Servlet的增多,就需要我们为每个Servlet进行配置,这样有两个缺点:1,不断的进行web.xml文件配置不仅麻烦而且会使其容量越来越大,负载也会变大;2,每个servlet需要我们继承HttpServlet,这样耦合性比较高。为了解决此,我们这里可以使用模板方法进行解决。
如果根据数据库中的表进行分类的话,我们一般对表的操作可以分成增删改查,四种操作,这里我们进行上移,看模板类:
- /**
- * 模板类,以后编写的servlet类需要继承这个类,而不是httpservlet类了
- * @author Administrator
- */
- public abstract class CommonServlet extends HttpServlet {
- @Override
- //模板方法,定义了算法
- protected void service(HttpServletRequest request, HttpServletResponse response)
- throws ServletException, IOException {
- //获取执行的类型
- String operationType=request.getParameter("operationType");
- //判断
- if("insert" .equals(operationType)){
- doInsert(request,response);
- }else if("select".equals(operationType)){
- doSelect(request,response);
- }else if("update".equals(operationType)){
- doUpdate(request,response);
- }else{
- //.......................
- }
- }
- //抽象方法,都需要实现
- protected abstract void doInsert(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException;
- protected abstract void doSelect(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException;
- protected abstract void doUpdate(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException;
- }
- </span>
当然那些增删改查的的servlet就需要继承这个类了:
- public class AuthServlet extends CommonServlet {
- private IAuthService authService=new AuthServiceImpl();
- @Override
- protected void doInsert(HttpServletRequest request,
- HttpServletResponse response) throws ServletException, IOException {
- //根据不同的表插入方法的具体实现
- }
- @Override
- protected void doSelect(HttpServletRequest request,
- HttpServletResponse response) throws ServletException, IOException {
- //根据不同表查询方法的具体实现
- }
- @Override
- protected void doUpdate(HttpServletRequest request,
- HttpServletResponse response) throws ServletException, IOException {
- //根据表的不同,更新方法的具体实现。
- }
- }
- </span>
这里注意我们在jsp页面进行相关功能时,需要我们将operationType执行的类别传过来,方便我们顶层Servlet的判断。这个就是框架抽象的很小很小的一步,但是对于这个模版方法阐释的也是很好的。
java设计模式(9):模板方法模式(TemplateMethod)的更多相关文章
- 折腾Java设计模式之模板方法模式
博客原文地址:折腾Java设计模式之模板方法模式 模板方法模式 Define the skeleton of an algorithm in an operation, deferring some ...
- Java设计模式应用——模板方法模式
所谓模板方法模式,就是在一组方法结构一致,只有部分逻辑不一样时,使用抽象类制作一个逻辑模板,具体是实现类仅仅实现特殊逻辑就行了.类似科举制度八股文,文章结构相同,仅仅具体语句有差异,我们只需要按照八股 ...
- Java设计模式之模板方法模式(Template Method)
一.含义 定义一个算法中的操作框架,而将一些步骤延迟到子类中.使得子类可以不改变算法的结构即可重定义该算法的某些特定步骤,不同的子类可以以不同的方式实现这些抽象方法,从而对剩余的逻辑有不同的实现. 二 ...
- Java设计模式之模板方法模式(Template)
前言: 我们在开发中有很多固定的流程,这些流程有很多步凑是固定的,比如JDBC中获取连接,关闭连接这些流程是固定不变的,变动的只有设置参数,解析结果集这些是根据不同的实体对象“来做调整”,针对这种拥有 ...
- java设计模式之模板方法模式
模板方法模式 定义一个操作中的算法的骨架,而将一些步骤延迟到子类中. 模板方法使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤.通俗的说的就是有很多相同的步骤的,在某一些地方可能有一些差 ...
- 从西天取经的九九八十一难来看Java设计模式:模板方法模式
目录 示例 模板方法模式 定义 意图 主要解决问题 适用场景 优缺点 西天取经的九九八十一难 示例 当我们设计一个类时,我们能明确它对外提供的某个方法的内部执行步骤, 但一些步骤,不同的子类有不同的行 ...
- 设计模式之模板方法模式 templateMethod
代码实现 public abstract class BankTemplateMethod { //具体方法 public void takeNumber(){ System.out.println( ...
- 折腾Java设计模式之建造者模式
博文原址:折腾Java设计模式之建造者模式 建造者模式 Separate the construction of a complex object from its representation, a ...
- 乐在其中设计模式(C#) - 模板方法模式(Template Method Pattern)
原文:乐在其中设计模式(C#) - 模板方法模式(Template Method Pattern) [索引页][源码下载] 乐在其中设计模式(C#) - 模板方法模式(Template Method ...
- 图解Java设计模式之模板模式
图解Java设计模式之模板模式 豆浆制作问题 模板方法模式基本介绍 模板方法模式原理类图 模板方法模式解决豆浆制作问题 模板方法模式的钩子方法 模板方法模式在Spring框架中的源码分析 模板方法模式 ...
随机推荐
- 云计算OpenStack环境搭建(4)
准备工作: 准备3台机器,确保yum源是可用的,分别为控制节点(192.168.11.3).计算节点(192.168.11.4)和存储节点(192.168.11.5) 控制节点:OpenStack日常 ...
- 6.3-4 zip、unzip
zip:打包和压缩文件 zip压缩格式是Windows与Linux等多平台通用的压缩格式.和gzip命令相比,zip命令压缩文件不仅不会删除源文件,而且还可以压缩目录. zip命令的参数选 ...
- 发现新大陆 --21lic
21lic网上发单平台 http://project.21ic.com/p/97250
- xshell 终端 中文乱码
我们在终端输入命令,中文显示乱码了. 解决方案:将xshell 传输采用的默认encode改为utf-8 解决:
- jQuery的链式编程风格
jQuery的链式编程风格 首先本人通过一个案例来展示jQuery的链式编程风格.先写一个页面,展示一个列表,代码如下: <body> <div> <ul class=& ...
- Step By Step(Lua环境)
Step By Step(Lua环境) Lua将其所有的全局变量保存在一个常规的table中,这个table被称为"环境".它被保存在全局变量_G中. 1. 全局变量声明: ...
- 针对Spring MVC的Interceptor内存马
针对Spring MVC的Interceptor内存马 目录 针对Spring MVC的Interceptor内存马 1 基础拦截器和调用流程的探索 1.1 基础拦截器 1.2 探索拦截器的调用链 1 ...
- 2020年Yann Lecun深度学习笔记(下)
2020年Yann Lecun深度学习笔记(下)
- 软件工具将GPU代码迁移到fpga以用于AI应用
软件工具将GPU代码迁移到fpga以用于AI应用 Software tools migrate GPU code to FPGAs for AI applications 人工智能软件初创公司Mips ...
- 保护嵌入式802.11 Wi-Fi设备时需要考虑的10件事
保护嵌入式802.11 Wi-Fi设备时需要考虑的10件事 10 things to consider when securing an embedded 802.11 Wi-Fi device 随着 ...
