责任链模式:即处理一个逻辑时,请求到一个对象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(); }}
测试结果:
一 寻找责任链上的下一个对象 五
五 寻找责任链上的下一个对象 二 二 寻找责任链上的下一个对象 四 四 寻找责任链上的下一个对象 三 最后执行处理: 三