在开发的过程中,经常会出现这种情况:请求A和请求B都需要有1、2、3三个过程(比如购买商品的用户验证、库存验证、邮费计算)去处理,但是因为请求的类型不同(比如请求A是实体货物,而请求B是虚拟武平等),这时候如果将请求A、B交给两个类去处理,就会有大量的重复代码出现,一旦需求出现变更,便需要修改大量重复的代码,所以显然不是最好的处理方式。
在java23中设计模式中,模板方法模式比较适合处理这种问题。
既然A、B请求的处理逻辑相同,但处理细节不同,那么可以预先讲逻辑封装成一个模板,在由处理请求的类去按照这个模板处理,逻辑层面的代码就实现了较好的封装。
具体类图如下:
首先定义一个模板类,来实现具体的逻辑代码
public abstract class Model {
public abstract void proccessingA();
public abstract void proccessingB();
public abstract void proccessionC();
/**
* 处理请求的逻辑函数
*/
public void handleRequest(){
proccessingA();
proccessingB();
proccessionC();
}
}
具体的实现类:
public class RequestAHandler extends Model {
@Override
public void proccessingA() {
System.out.println("正在处理请求1的A过程");
}
@Override
public void proccessingB() {
System.out.println("正在处理请求1的B过程");
}
@Override
public void proccessionC() {
System.out.println("正在处理请求1的C过程");
}
}
public class RequestBHandler extends Model {
@Override
public void proccessingA() {
System.out.println("正在处理请求2的A过程");
}
@Override
public void proccessingB() {
System.out.println("正在处理请求2的B过程");
}
@Override
public void proccessionC() {
System.out.println("正在处理请求2的C过程");
}
}
测试代码:
public static void modelTest(){
Model model1 = new RequestAHandler();
Model model2 = new RequestBHandler();
model1.handleRequest();
model2.handleRequest();
}
这样的话,如果需求发生了变更,请求的处理逻辑发生了变化,我们只需要修改Model类里面的代码就能实现。