顾名思义,责任链模式(Chain of Responsibility Pattern)为请求创建了一个接收者对象的链。这种模式给予请求的类型,对请求的发送者和接收者进行解耦。这种类型的设计模式属于行为型模式。
在这种模式中,通常每个接收者都包含对另一个接收者的引用。如果一个对象不能处理该请求,那么它会把相同的请求传给下一个接收者,依此类推。
1package com.ceshi16; 2 3public interface Handler { 4 public void operator(); 5} 6 7package com.ceshi16; 8 9public abstract class AbstractHandler { 10 private Handler handler; 11 12 public Handler getHandler() { 13 return handler; 14 } 15 16 public void setHandler(Handler handler) { 17 this.handler = handler; 18 } 19} 20 21package com.ceshi16; 22 23public class MyHandler extends AbstractHandler implements Handler{ 24 25 private String name; 26 27 public MyHandler(String name) { 28 this.name = name; 29 } 30 31 @Override 32 public void operator() { 33 System.out.println(name+"deal!"); 34 if(getHandler()!=null){ 35 getHandler().operator(); 36 } 37 } 38 39} 40 41package com.ceshi16; 42 43public class Test { 44 45 public static void main(String[] args) { 46 MyHandler h1 = new MyHandler("h1"); 47 MyHandler h2 = new MyHandler("h2"); 48 MyHandler h3 = new MyHandler("h3"); 49 50 h1.setHandler(h2); 51 h2.setHandler(h3); 52 53 h1.operator(); 54 } 55}
结果:

其实,责任链模式的处理原则是 "如果一个对象不能处理该请求,那么它会把相同的请求传给下一个接收者,依此类推。"
所以实例并不能体现出这个。通常需要在operator方法中添加一些额外的判定。