責(zé)任鏈模式(Chain of Responsibility Pattern)中包含了一些命令對(duì)象和一系列的處理對(duì)象蛆封。 每一個(gè)處理對(duì)象決定它能處理哪些命令對(duì)象喻杈,它也知道如何將它不能處理的命令對(duì)象傳遞給該鏈中的下一個(gè)處理對(duì)象。 該模式還描述了往該處理鏈的末尾添加新的處理對(duì)象的方法苍苞。
下面是責(zé)任鏈模式的一個(gè)簡(jiǎn)單示例:
package 責(zé)任鏈模式;
//請(qǐng)求對(duì)象固翰,本例只是簡(jiǎn)單地包含一個(gè)請(qǐng)求級(jí)別
public class Request {
private int level=0;
public Request(int level){
this.level=level;
}
public int getLevel(){
return this.level;
}
}
package 責(zé)任鏈模式;
//每一個(gè)Handler類對(duì)象首先決定是否需要在該層做處理,然后將控制傳遞到下一個(gè)Handler羹呵。
public abstract class Handler {
int level=0;//用來(lái)判斷請(qǐng)示的級(jí)別骂际,實(shí)際項(xiàng)目中可能會(huì)更復(fù)雜
Handler nextHandler=null;
public Handler(int level){
this.level=level;
}
public final void handleRequest(Request request){
if(request.getLevel()==this.level){
response(request);
} else {
if(nextHandler!=null){
nextHandler.handleRequest(request);
}else{
System.out.println("超出所能處理的級(jí)別!");
}
}
}
public void setNextHandler(Handler nextHandler){
this.nextHandler=nextHandler;
}
public abstract void response(Request request);
}
package 責(zé)任鏈模式;
public class ConcreteHandler extends Handler{
public ConcreteHandler(int level) {
super(level);
}
@Override
public void response(Request request) {
System.out.println("ConcreteHandler處理了"+request.getLevel()+"級(jí)請(qǐng)求");
}
}
package 責(zé)任鏈模式;
//客戶端
public class Client {
public static void main(String[] args) {
Request request1=new Request(1);
Request request2=new Request(2);
Request request3=new Request(3);
Request request4=new Request(4);
ConcreteHandler handler1=new ConcreteHandler(1);
ConcreteHandler handler2=new ConcreteHandler(2);
ConcreteHandler handler3=new ConcreteHandler(3);
handler1.setNextHandler(handler2);
handler2.setNextHandler(handler3);
handler1.handleRequest(request1);
handler1.handleRequest(request2);
handler1.handleRequest(request3);
handler1.handleRequest(request4);
}
}
輸出:
ConcreteHandler處理了1級(jí)請(qǐng)求
ConcreteHandler處理了2級(jí)請(qǐng)求
ConcreteHandler處理了3級(jí)請(qǐng)求
超出所能處理的級(jí)別!