设计模式之模板方法模式
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,这样自己才有体会哦
总结:
问:有的小伙伴可能会问,为什么要使用这个设计模式呢?为什么要学呢?
答:为了自己写代码爽啊,你想想这个设计模式的好处在哪里呢?实现了流程与业务进行分离,平时在开发的时候只会觉得越写越香,简直是香中香!
本文来自博客园,作者:程序员鲜豪,转载请注明原文链接:https://www.cnblogs.com/hg-blogs/p/16541166.html

浙公网安备 33010602011771号