模板方法模式

守給你的承諾、 提交于 2020-02-04 02:40:47

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

应用场景:servlet

代码:

//短信模板
public abstract class MsgTemplate {
    public void sendMsg(){
        //1.开始日志报文
        addHeadLog();
        //2.调用不同的运营商发送短信
        httpRequest();
        //3.结束日志报文
        addFootLog();
    }

    public abstract void httpRequest();

    private void addHeadLog() {
        System.out.println("调用运营商开始记录日志");
    }

    private void addFootLog() {
        System.out.println("调用运营商结束记录日志");
    }

}

public class YiDong extends MsgTemplate {
    @Override
    public void httpRequest() {
        System.out.println("yidong");
    }
}

public class LianTong extends MsgTemplate{
    @Override
    public void httpRequest() {
        System.out.println("liantong");
    }
}

public class Client {
    public static void main(String[] args) {
        MsgTemplate yidong = new YiDong();
        yidong.sendMsg();
        MsgTemplate lianTong = new LianTong();
        lianTong.sendMsg();
    }
}

通过上述代码,可以看出,我们首先定义一个抽象的模板方法类,然后将不变的方法实现了,将容易变化的方法定义成抽象方法,然后由子类去实现这些易变的操作。

我在工作中就遇到这么一个场景,就是需要对接快递承运商,但是不同的快递承运商会有不同的格式要求,比如说每个承运商都需要创建快递面单和打印快递面单,这时候我们就可以将这两个方法作为模板类中的方法给实现了,当然他们要求的xml格式是不一样的,这里还定义了一个格式化的类去整理不同承运商要求的格式。然后有些承运商是由取消订单的操作,有些则不需要取消直接不用就好了,这个就是容易变化的地方,就需要在子类去实现,需要取消的就要去实现这个方法去调用他们的取消API,不需要的也需要实现,只是里面不需要任何操作就是了。

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!