概念:实现一些操作时,整体步骤很固定,但是其中一小部分是变化的,这时候就可以使用模板方法模式,将容易变化的部分抽离出来,供子类实现。
应用场景: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,不需要的也需要实现,只是里面不需要任何操作就是了。
来源:CSDN
作者:hywang94
链接:https://blog.csdn.net/qq_32285039/article/details/104158649