什么是模板方法
模板方法模式:定义一个操作中的算法骨架,而将一些步骤延迟到子类中。模板方法使得子类可以不改变一个算法的结构即可重定义该算法的
重复代码全部在父类里面,不同业务的,抽取给子类进行实现。抽取过程---抽象方法。
某些特定步骤。
核心:处理某个流程的代码已经都具备,但是其中某个节点的代码暂时不能确定。因此,我们采用工厂方法模式,将这个节点的代码实现转移给
子类完成。即:处理步骤在父类中定义好,具体的实现延迟到子类中定义。
说白了,就是将一些相同操作的代码,封装成一个算法的骨架。核心的部分留在子类中操作,在父类中只把那些骨架做好。
例如:
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-11-10 11:53:55