类图:
一个抽象类,里面有一个自身的成员变量和一个设置该变量的方法,以及一个请求方法,两个子类,最后是客户端主类。
抽象类代码:
package com.freshbin.pattern.chain.myexample;
/**
* 抽象责任链类
*
* @author freshbin
* @date 2019年1月14日 下午8:22:08
*/
public abstract class AbstractApprover {
protected AbstractApprover abstractApprover;
public abstract void processRequest(Integer num);
public void setAbstractApprover(AbstractApprover abstractApprover) {
this.abstractApprover = abstractApprover;
}
}
子类:
package com.freshbin.pattern.chain.myexample;
public class ApproverA extends AbstractApprover {
@Override
public void processRequest(Integer num) {
if(num > 0) {
System.out.println("A处理");
} else {
abstractApprover.processRequest(num);
}
}
}
package com.freshbin.pattern.chain.myexample;
public class ApproverB extends AbstractApprover {
@Override
public void processRequest(Integer num) {
if(num <= 0) {
System.out.println("B处理");
} else {
abstractApprover.processRequest(num);
}
}
}
客户端主类:
package com.freshbin.pattern.chain.myexample;
/**
* 责任链模式
*
* @author freshbin
* @date 2019年1月14日 下午8:21:38
*/
public class ChainPatternDemo {
public static void main(String[] args) {
AbstractApprover approverA = new ApproverA();
AbstractApprover approverB = new ApproverB();
approverA.setAbstractApprover(approverB);
approverA.processRequest(1);
approverA.processRequest(-1);
System.out.println("================");
approverB.setAbstractApprover(approverA);
approverB.processRequest(1);
approverB.processRequest(-1);
}
}
效果图: