设计模式之模板方法模式
Hello大家好,最近楼主在学习设计模式,今天要带来的是模板方法模式。
废话不多说:什么是模板方法模式呢?我给大家找了一张图,这是图片地址链接。
大家看到这个图肯能还是有点懵逼,直接上代码吧。
第一步:
首先搞一个自己定义的骨架流程,这里是从别的博主哪里借鉴的代码,总体的流程就是需要去查询商户的信息,然后加签名,在判断是否走代理,再请求,最后在验证签名,这样的一个流程。
看到类图,所以我们依葫芦画瓢,需要先整一个抽象的父类,定义模板方法和一些抽象方法,以及定义好之后,需要定义一个流程方法。
/** * @Description 抽象类定义骨架流程(查询商户信息,加签,http请求,验签) */ public abstract class AbstractMerchantService { //查询商户信息 void queryMerchantInfo() { System.out.println("查询商户信息"); }
//加签 void signature() { System.out.println("加签"); } //http 请求 void httpRequest() { System.out.println("http 请求"); }
// 验签 void verifySinature() { System.out.println("验签"); }
//模板方法流程 void handlerTempPlate() { //查询商户信息 queryMerchantInfo(); //加签 signature(); //是否走代理 isRequestByProxy(); //http 请求 httpRequest(); // 验签 verifySinature(); } // Http是否走代理(提供给子类实现) abstract void isRequestByProxy(); }
第二步:我们然后需要去继承这个类然后,重写父类中的方法isRequestByProxy()这个方法,我这里只是演示所以只是输出了方法在做什么,实际上可以替换为自己具体的业务流程,学习的时候不要太死板哦!
子类A需要走代理:
/** * @Description 走http代理的《模板方法》 */ public class CompanyAServiceImplA extends AbstractMerchantService { //走http代理的 void isRequestByProxy(){ System.out.println("走http代理"); } }
子类B不需要走代理:
/** * @Description 不走代理的《模板方法》 */ public class CompanyAServiceImplB extends AbstractMerchantService{ @Override void isRequestByProxy() { System.out.println( "不走http代理"); } }
最后来测试一下吧:
/** * @Description 测试main方法 */ public class Clients { public static void main(String[] args) { CompanyAServiceImplA a = new CompanyAServiceImplA(); a.handlerTempPlate(); System.out.println("------------------分割线-------------------"); CompanyAServiceImplB b = new CompanyAServiceImplB(); b.handlerTempPlate(); } }
输出的结果是:
可以看到,执行的结果跟具体的子类中的方法的处理不同,有不同的结果呢!希望有条件的可以跟着敲一遍demo,这样自己才有体会哦
总结:
问:有的小伙伴可能会问,为什么要使用这个设计模式呢?为什么要学呢?
答:为了自己写代码爽啊,你想想这个设计模式的好处在哪里呢?实现了流程与业务进行分离,平时在开发的时候只会觉得越写越香,简直是香中香!
本文来自博客园,作者:程序员hg,转载请注明原文链接:https://www.cnblogs.com/hg-blogs/p/16541166.html