模版方法设计模式

什么模板方法

模板方法模式:定义一个操作中的算法骨架,而将一些步骤延迟到子类中。模板方法使得子类可以不改变一个算法的结构即可重定义该算法的

重复代码全部在父类里面,不同业务的,抽取给子类进行实现。抽取过程---抽象方法。

某些特定步骤。

核心:处理某个流程的代码已经都具备,但是其中某个节点的代码暂时不能确定。因此,我们采用工厂方法模式,将这个节点的代码实现转移给

子类完成。即:处理步骤在父类中定义好,具体的实现延迟到子类中定义。

说白了,就是将一些相同操作的代码,封装成一个算法的骨架。核心的部分留在子类中操作,在父类中只把那些骨架做好。

例如:

1.去银行办业务,银行给我们提供了一个模板就是:先取号,排对,办理业务(核心部分我们子类完成),给客服人员评分,完毕。

这里办理业务是属于子类来完成的,其他的取号,排队,评分则是一个模板。

2.去餐厅吃饭,餐厅给提供的一套模板就是:先点餐,等待,吃饭(核心部分我们子类完成),买单。

这里吃饭是属于子类来完成的,其他的点餐,买单则是餐厅提供给我们客户的一个模板。

什么时候使用模板方法

实现一些操作时,整体步骤很固定,但是呢。就是其中一小部分容易变,这时候可以使用模板方法模式,将容易变的部分抽象出来,供子类实现。

开发中应用场景

其实,各个框架中,都有模板方法模式的影子。

数据库访问的封装、Junit单元测试、servlet中关于doGet/doPost方法的调用

Hibernate中模板程序、spring中JDBCTemplate,HibernateTemplate等等

代码例子:

package com.example.demo.templatefactory;

/** * 模版方法接口 * 场景:第三方短信接口服务方调用联通运行商、移动运营商 实现的场景 *  1.开始 记录开始日志 *  2.调用 接口进行代码逻辑处理(不同运行商逻辑处理可能不同) *  3.返回结果 记录结束日志 * *  从上面这几个步骤来看,第一步与第三步的操作都是一样的。只有第二步需要做单独的处理。 *    因为开始记录日志、结束记录日志做的都是统一处理,只有业务逻辑处理单独的方法进行处理(抽象类)。 */public abstract class MessageTemplate {

    public void sendMsg() {        //1. 记录开始日志        addStartLog();

        //2.调用具体的运营商发送消息        httpRequest();

        //3.结束结束日志        addEndLog();    }

    /**     *  不同的运营商 请求出来可能不同     */    public abstract void httpRequest();

    /**     *  调用方法开始时记录日志操作     */    private void addStartLog() {

        System.out.println("调用运行商开始时记录日志");    }

    /**     *  调用方法结束时记录日志     */    private void addEndLog() {        System.out.println("调用运行商结束时记录日志");    }

}
package com.example.demo.templatefactory;

/** *  接口实现类 */public class Liantong extends MessageTemplate {    @Override    public void httpRequest() {        System.out.println("调用联通接口逻辑处理执行...");    }}
package com.example.demo.templatefactory;
/** *   接口实现类 */
public class YiDong extends MessageTemplate {    @Override    public void httpRequest() {        System.out.println("调用移动接口逻辑处理执行...");    }}
package com.example.demo.templatefactory;

/** *  客户端调用 */public class ClientTemplate {    public static void main(String[] args) {        //初始化        MessageTemplate yiDong = new YiDong();        //调用方法执行        yiDong.sendMsg();    }}

原文地址:https://www.cnblogs.com/ming-blogs/p/10841736.html

时间: 2024-08-28 19:07:12

模版方法设计模式的相关文章

二、模版方法设计模式

模板方法设计模式: 解决的问题:当功能内部一部分实现是确定,一部分实现是不确定的.这时可以把不确定的部分暴露出去,让子类去实现. ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 abstract class GetTime{     public final void getTime(){ //此功能如果不需要复写,可加final限定         long start

代码片--实现一个简单的模版方法设计模式(获取一段程序运行的时间)

package com.dreamy.day03; /** * @author dreamy * 需求:获取一段程序运行的时间 * 原理:获取程序开始和结束的时间并相减即可. * 获取时间:System.currentTimeMillis() * * * 当代码完成优化后,就可以解决这类问题 * 这种方式叫做模版方法设计模式. * * 什么是模版方法呢? * 在定义功能时,功能的一部分是确定的,但是有一部分是不确定的,而确定的部分在使用的不确定的部分, * 那么这时就将不确定的部分暴露出去,由该

模版方法设计模式(抽象类)

总结理解的模板方法设计模式及抽象类 (菜鸟一只,若有什么侵权或者不足之处,请指出,谢谢) 模板方法设计模式: 在父类中定义一个总体的算法骨架,而将一些具体的实现步骤放在到子类中,因为不同的子类实现细节不同         模板方法使得子类可以在不改变算法框架的情况下,只需要重新定义算法的某些实现步骤(借助于抽象类实现) 模板方法:一种统一的处理方式,即模板(比如课设报告,大家都按照规定同一种的格式去写,这就是模板,但是课设的题目不同,其具体内容是不同的) 注意:         抽象父类提供的模

007 - 策略模式对模版方法设计模式改进

如果我只需要获取User 的name 怎么办? 需要在重新创建一个方法 单独获取方法吗? 那可以通过返回User 对象 这种方法 虽然说可以, 但不怎么符合设计规范 我需要什么样的数据, 你应该就返回给我什么数据, 而不是需要我在处理而且当数据量的时候 会影响网络数据的传输性能 public String findName(int id){     String sql = "select name from user where id = ?";     Object[] args 

设计模式 模版方法模式 展现程序员的一天

转载请标明出处:http://blog.csdn.net/lmj623565791/article/details/26276093 继续设计模式~ 模版方法模式 老套路,先看下定义:定义了一个算法的骨架,而将一些步骤延迟到子类中,模版方法使得子类可以在不改变算法结构的情况下,重新定义算法的步骤. 简单看下定义,模版方法定义了一个算法的步骤,并且允许子类为一个或多个步骤提供实现.定义还算清晰,下面来个例子展示下本公司的上班情况(纯属娱乐,如有雷同,请对号入座).简单描述一下:本公司有程序猿.测试

NET设计模式 第二部分 行为型模式(15):模版方法模式(Template Method)

摘要:Template Method模式是比较简单的设计模式之一,但它却是代码复用的一项基本的技术,在类库中尤其重要. 主要内容 1.概述 2.Template Method解说 3..NET中的Template Method模式 4.适用性及实现要点 概述 变化一直以来都是软件设计的永恒话题,在XP编程中提倡拥抱变化,积极应对.如何更好的去抓住变化点,应对变化?如何更好的提高代码复用?通过学习Template Method模式,您应该有一个新的认识. 意图 定义一个操作中的算法的骨架,而将一些

设计模式-模版方法模式

模版方法是一个非常简单,使用频率比较高的设计模式. 意图: 定义一个操作中算法的骨架,而将将一些方法的实现延迟到子类中,TemplateMethod使得子类可以不改变算法的结构即可重定义算法的特定方法. 参与者: AbstractClass,抽象类.定义抽象的操作,具体的子类将重新定义各自的实现算法. ConcreteClass,具体的实现类. 回想一下,在之前的开发中用到过这种模式,简单描述一下场景. 在轻松天气项目中,主程序生成widget,由于widget插件不断的扩充和升级,具体的布局和

方法模版模式(设计模式_11)【精品博客】

今天给大家介绍的是:模版方法模式,这个模式非常的常见,很多开发者,无意中其实就已经用到了,也非常简单,只是还不知道,这属于一种设计模式而已,而关于这个设计模式,在网上有很多专业性词语来说明,看的人审美疲劳. 其实这个设计模式,通俗易懂的来讲,就是把子类重复的东西,定义到父类中模块化起来,父类只需要去管理好算法流程框架,把经常变化的点,让子类去继承完成. 我们看下面几道案例来理解就OK了: 案例一: 在很久很久以前,有一个小山村,住在这里面的小朋友上学无比困难,因为这个小村庄太过于偏僻,像是被大山

.NET设计模式(16):模版方法(Template Method)(转)

摘要:Template Method模式是比较简单的设计模式之一,但它却是代码复用的一项基本的技术,在类库中尤其重要. 主要内容 1.概述 2.Template Method解说 3..NET中的Template Method模式 4.适用性及实现要点 概述 变化一直以来都是软件设计的永恒话题,在XP编程中提倡拥抱变化,积极应对.如何更好的去抓住变化点,应对变化?如何更好的提高代码复用?通过学习Template Method模式,您应该有一个新的认识. 意图 定义一个操作中的算法的骨架,而将一些