1.1.1 描述
l 正规描述
在责任链模式中,很多对象由每一个对象对其下家的引用而接 起来形成一条链。请求在这个链上传递,直到链上的某一个对象决定处理此请求。客户并不知道链上的哪一个对象最终处理这个请求,系统可以在不影响客户端的情况下动态的重新组织链和分配责任。处理者有两个选择:承担责任或者把责任推给下家。一个请求可以最终不被任何接收端对象所接受。
l 形象描述
晚上去上英语课,为了好开溜坐到了最后一排,哇,前面坐了好几个漂亮的MM哎,找张纸条,写上“Hi,可以做我的女朋友吗?如果不愿意请向前传”,纸条就一个接一个的传上去了,糟糕,传到第一排的MM把纸条传给老师了,快跑。
1.1.2 类图&示意代码
public interface Handler(){ void Operation1(); void setNextHandler(Handler handler); boolean canDo(); }
public class ConcreteHandler1 implements Handler(){ private Handler nextHandler;
public void setNextHandler(Handler handler){ this.nextHandler = handler; }
public void Operation1(){ if(this.canDo()){ //to do }
if(nextHandler != null){ nextHandler.Operation1(); }
return; }
public Boolean canDo(){ //to do } }
public class ConcreteHandler2 implements Handler(){ private Handler nextHandler;
public void setNextHandler(Handler handler){ this.nextHandler = handler; }
public void Operation1(){ if(this.canDo()){ //to do }
if(nextHandler != null){ nextHandler.Operation1(); }
return; }
public Boolean canDo(){ //to do } }
public class ConcreteHandler3 implements Handler(){ private Handler nextHandler;
public void setNextHandler(Handler handler){ this.nextHandler = handler; }
public void Operation1(){ if(this.canDo()){ //to do }
if(nextHandler != null){ nextHandler.Operation1(); }
return; }
public Boolean canDo(){ //to do } }
public class Client(){ public void main(String args[]){ Handler h1 = new ConcreteHandler1(); Handler h2 = new ConcreteHandler2(); Handler h3 = new ConcreteHandler3();
h1.setNextHandler(h2); h2.setNextHandler(h3);
h1.Operation1(); } } |