责任链模式相对简单,主要是将任务进行迭代查找,最典型的应用是tomcat 中过滤器的应用好了 废话不说 贴代码 以上代码也是在网上找了个比较典型的代码并非原创,请作者见谅主要是共同学习分享
public abstract class Handler {
/**
* 抽象处理者角色
* **/
// 后继持有者
protected Handler successor;
// 示意处理请求的方法 虽然该方法没有传入参数但是实际可以传入参数的
public abstract void handleRequest();
// 必须有取值和放值方法
public Handler getSuccessor() {
return successor;
}
public void setSuccessor(Handler successor) {
this.successor = successor;
}
}
package com.test.pattern.chain;
public class ConcreteHandler extends Handler{
/**
* 判断是否有后继的责任对象
* 如果有,就转发请求给后继的责任对象
* 如果没有,则处理请求
*/
@Override
public void handleRequest() {
// TODO Auto-generated method stub
if(getSuccessor()!=null){
System.out.println("放过请求");
getSuccessor().handleRequest();
}else{
System.out.println("处理请求");
}
}
}
package com.test.pattern.chain;
public class Client {
public static void main(String[] args){
// 组装责任链
Handler handler1 = new ConcreteHandler();
Handler handler2 = new ConcreteHandler();
handler2.setSuccessor(handler1);
// 提交、
handler2.handleRequest();
handler1.handleRequest();
}
}
其实这里有个值得思考的问题,为什么很多设计模式定义标准使用接口,而这里是用抽象类呢,主要是抽象类起到骨架作用,