设计模式-责任链

    由于项目需要, 在一个请求处理多个对象场景, 再三合计感觉设计模式-责任链非常适合

    使用之后感觉责任链模式还是很强大的, 即使多个对象都有机会处理请求, 还避免发送者与接受者的耦合

    废话不多说, Demo直接开干

 

package zerenlian;

/**
 * 创建责任链
 * @author Lisa-Luo
 */
public class Factory {

	// 节点可设置静态,只加载一次,避免每次调用都new对象,占内存
	private static X x = new A();
	static {
		x.setNextHandler(new B()).setNextHandler(new C());
	}

	// 获取责任链
	public static X getQuote() {
		return x;
	}
}

package zerenlian;

/**
 * 抽象类X
 * 
 * @author Lisa-Luo
 * 
 */
public abstract class X {

	private X x;

	protected abstract boolean needHand(String request);

	// 设置节点
	public X setNextHandler(X nextHandler) {
		this.x = nextHandler;
		return this.x;
	}

	// 处理逻辑
	public void handle(String request) {
		X quote = this.x;
		while (quote != null) {
			if (quote.needHand(request)) {
				quote.handle(request);
			}
			quote = quote.x;
		}
	}
}

package zerenlian;

/**
 * 子类A
 * 
 * @author Lisa-Luo
 * 
 */
public class A extends X {

	@Override
	protected boolean needHand(String request) {
		// TODO Auto-generated method stub
		return true;
	}

	public void handle(String request) {
		System.err.println("进入A");
		super.handle(request);
	}
}

package zerenlian;

/**
 * 子类B
 * 
 * @author Lisa-Luo
 * 
 */
public class B extends X {

	@Override
	protected boolean needHand(String request) {
		// TODO Auto-generated method stub
		return true;
	}

	public void handle(String request) {
		System.err.println("进入B");
	}
}

package zerenlian;

/**
 * 子类C
 * 
 * @author Lisa-Luo
 * 
 */
public class C extends X {

	@Override
	protected boolean needHand(String request) {
		// TODO Auto-generated method stub
		return true;
	}

	public void handle(String request) {
		System.err.println("进入C");
	}
}

package zerenlian;
/**
 * 测试类
 * @author Lisa-Luo
 *
 */
public class test {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Factory.getQuote().handle("");
	}
}

处理结果:

   进入A
   进入B
   进入C

总结:

        整个链接的执行顺序A>B>C, 可以在对应子类处理共有公共校验, 个性化处理. 针对责任链模式有人说是每次执行会产生新对象,占用内存. 代码中Factory类很好的解决了这一点.

适用场景:

1、每次请求都有相同校验

2、针对不同业务场景进行个性化设置

3.、公共处理逻辑

        

一点积累, 一点成长, 原共同进步!

 

 

你可能感兴趣的:(JAVA,java设计模式)