责任链模式:即处理一个逻辑时,请求到一个对象A,对象A处理完毕传递给对象B进行处理,对象B处理完毕传递给对象C进行处理,依次下去,直到传递到最后一个对象处理完毕。
源代码如下:
责任链接口(Handler):定义操作的接口,对外提供。
责任链抽象类(AbstractHandler):定义了一个接口类型对象,主要用来设定和返回责任链的下一个对象。
责任链具体类(MyHandler):实现接口,继承抽象类。
实现的方法逻辑【1、如果有下一个对象,则传递、调用下一个对象,2、如果没有下一个对象,处理请求。】
package com.pattern;
public interface Handler {
public void operation();
}
package com.pattern;
public abstract class AbstractHandler {
private Handler handler;
public Handler getHandler() {
return handler;
}
public void setHandler(Handler handler) {
this.handler = handler;
}
}
package com.pattern;
public class MyHandler extends AbstractHandler implements Handler {
private String value;
public MyHandler(String value) {
this.value = value;
}
@Override
public void operation() {
if (null != getHandler()) {
System.out.println(this.value + " 寻找责任链上的下一个对象 "
+ ((MyHandler) super.getHandler()).value);
getHandler().operation();
} else {
System.out.println("最后执行处理:" + this.value);
}
}
}
package com.pattern;
public class Test {
public static void main(String[] args) {
MyHandler myh1 = new MyHandler(" 一 ");
MyHandler myh2 = new MyHandler(" 二 ");
MyHandler myh3 = new MyHandler(" 三 ");
MyHandler myh4 = new MyHandler(" 四 ");
MyHandler myh5 = new MyHandler(" 五 ");
myh1.setHandler(myh5);
myh5.setHandler(myh2);
myh2.setHandler(myh4);
myh4.setHandler(myh3);
myh1.operation();
}
}
测试结果:
一 寻找责任链上的下一个对象 五
五 寻找责任链上的下一个对象 二
二 寻找责任链上的下一个对象 四
四 寻找责任链上的下一个对象 三
最后执行处理: 三