責任鏈模式
結構圖
代碼實現
/**
* 請求類
*
* @author xukai 2016年4月4日 下午1:13:24
*
*/
public class Request {
Level level;
public Request(Level level) {
super();
this.level = level;
}
public Level getLevel() {
return level;
}
}
/**
* 請求級別類
*
* @author xukai 2016年4月4日 下午1:20:51
*
*/
public class Level {
private int level = 0;
public Level(int level) {
this.level = level;
}
/**
* 當前等級大於或等於 return true<br>
* @param level
* @return
*/
public boolean above(Level level){
if(this.level >= level.level){
return true;
}
return false;
}
}
抽象處理類Handler:
/**
* 定義一個處理請示的接口
*
* @author xukai 2016年4月4日 下午1:07:22
*
*/
public abstract class Handler {
protected Handler nextHandler;
/**
* 處理請求
*
* @param request
* @return
*/
public final Response handleRequest(Request request) {
Response response = null;
if (this.getHandlerLevel().above(request.getLevel())) {
// 處理者處理等級高於或等於當前請求中的等級,處理請求
response = this.response(request);
} else {
// 處理者處理等級低於當前請求中的等級
if (this.nextHandler != null) {
this.nextHandler.handleRequest(request);
} else {
System.out.println("沒有合適的處理者");
}
}
return response;
}
/**
* 獲取處理者處理等級
*
* @return
*/
protected abstract Level getHandlerLevel();
/**
* 處理請求,返回響應
*
* @param request
* @return
*/
public abstract Response response(Request request);
public void setNextHandler(Handler nextHandler) {
this.nextHandler = nextHandler;
}
}
具體處理請求類ConcreteHandler1:
/**
* 具體處理者1
*
* @author xukai 2016年4月4日 下午1:26:31
*
*/
public class ConcreteHandler1 extends Handler {
@Override
protected Level getHandlerLevel() {
return new Level(1);
}
@Override
public Response response(Request request) {
System.out.println("請求被處理者1處理");
return null;
}
}
ConcreteHandler2:
/**
* 具體處理者2
*
* @author xukai 2016年4月4日 下午1:28:08
*
*/
public class ConcreteHandler2 extends Handler {
@Override
protected Level getHandlerLevel() {
return new Level(3);
}
@Override
public Response response(Request request) {
System.out.println("請求被處理者2處理");
return null;
}
}
處理請求直到返回的響應Response:
/**
* 響應類
*
* @author xukai 2016年4月4日 下午1:14:19
*
*/
public class Response {
}
客戶端測試:
public class Client {
@SuppressWarnings("unused")
public static void main(String[] args) {
Handler handler1 = new ConcreteHandler1();
Handler handler2 = new ConcreteHandler2();
Handler handler3 = new ConcreteHandler3();
handler1.setNextHandler(handler2);
handler2.setNextHandler(handler3);
Response response = handler1.handleRequest(new Request(new Level(2)));
response = handler1.handleRequest(new Request(new Level(4)));
response = handler1.handleRequest(new Request(new Level(6)));
}
}
請求被處理者2處理
請求被處理者3處理
沒有合適的處理者