设计模式总结--逻辑封装

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

猜你喜欢

转载自729660130.iteye.com/blog/2328648