以下内容摘抄于《C#大话设计模式》
职责链模式(Chain of Responsibility):是多个对象对象都有机会处理请求,从而避免请求的发送者和接受者之间的耦合关系。将这个对象连城一条链,并沿着这条链传递该请求,直到有一个对象处理它为止。
职责链模式的结构图:
Handler类,定义一个处理请示的接口
package com.schema.responsibility;
public abstract class Handler {
protected Handler nextHandler;
// 设置下一位处理者
public void SetSuccessor(Handler handler){
nextHandler = handler;
}
public abstract void HandleRequest(int request);
}
继承Handler类的子类:
package com.schema.responsibility;
public class ConcreteHandler1 extends Handler {
public void HandleRequest(int request){
if(request < 100){
System.out.println(this.getClass().getSimpleName() + "处理请求" + request);
}else {
if(this.nextHandler != null){
this.nextHandler.HandleRequest(request);
}
}
}
}
package com.schema.responsibility;
public class ConcreteHandler2 extends Handler {
public void HandleRequest(int request){
if(request >= 100 && request < 1000){
System.out.println(this.getClass().getSimpleName() + "处理请求" + request);
}else if(nextHandler != null){
nextHandler.HandleRequest(request);
}
}
}
package com.schema.responsibility;
public class ConcreteHandler3 extends Handler {
public void HandleRequest(int request) {
if (request >= 1000) {
System.out.println(this.getClass().getSimpleName() + "处理请求" + request);
} else if (nextHandler != null) {
nextHandler.HandleRequest(request);
}
}
}
客户端类:
package com.schema.responsibility;
public class AppMain {
public static void main(String[] args) {
Handler h1 = new ConcreteHandler1();
Handler h2 = new ConcreteHandler2();
Handler h3 = new ConcreteHandler3();
h1.SetSuccessor(h2);
h2.SetSuccessor(h3);
int[] requests = { 10, 160, 1003, 121, 23, 1920, 56 };
for (int r : requests) {
h1.HandleRequest(r);
}
}
}