在开发的过程中,经常会出现这种情况:请求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类里面的代码就能实现。