设计模式之模板方法模式

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,这样自己才有体会哦

总结:

  问:有的小伙伴可能会问,为什么要使用这个设计模式呢?为什么要学呢?

  答:为了自己写代码爽啊,你想想这个设计模式的好处在哪里呢?实现了流程与业务进行分离,平时在开发的时候只会觉得越写越香,简直是香中香! 

 
 
posted @ 2022-08-01 17:44  程序员hg  阅读(84)  评论(0编辑  收藏  举报