責任鏈模式簡介:
責任鏈模式是行爲設計模式之一,使對個對象都有機會處理請求,從而避免了請求的發送者和接受者之間的耦合關係。將這些對象連成一條鏈,並沿着這條鏈傳遞請求,直到對象處理它爲止。
責任鏈模式使用場景:
1. 多個對象可以處理同一請求,但是具體由那個對象處理則在運動時動態決定。
2. 在請求處理者不明確的情況下向多個對象中的一個提交請求。
3. 需要動態指定一組對象處理請求的
UML圖
具體使用實例:
//抽象請求者
public abstract class AbstractRequest {
/**
* 權限
* @return
*/
public abstract int getRequestLevel();
}
//處理者具體實例
//抽象處理者
public abstract class AbstractHandler {
/**
* 下一個處理對象
*/
public AbstractHandler mNextHandler;
public abstract void handleRequest(AbstractRequest request);
public abstract int handleRequestLevel();
}
public class ConcreteHandler1 extends AbstractHandler {
@Override
public void handleRequest(AbstractRequest request) {
//請求者的請求的級別
int level = request.getRequestLevel();
if (level <= handleRequestLevel()) {
System.out.println("ConcreteHandler1 處理請求!");
} else {
mNextHandler.handleRequest(request);
}
}
@Override
public int handleRequestLevel() {
return 2000;
}
}
public class ConcreteHandler2 extends AbstractHandler {
@Override
public void handleRequest(AbstractRequest request) {
//請求者任務的級別
int level = request.getRequestLevel();
if (level <= handleRequestLevel()) {
System.out.println("ConcreteHandler2 處理請求");
} else {
mNextHandler.handleRequest(request);
}
}
@Override
public int handleRequestLevel() {
return 5000;
}
}
//請求者具體實例
public class ConcreteRequest1 extends AbstractRequest {
@Override
public int getRequestLevel() {
return 200;
}
}
public class ConcreteRequest2 extends AbstractRequest {
@Override
public int getRequestLevel() {
return 2020;
}
}
//實際調用場景
public static void main(String[] args) {
//創建處理者1鏈條
ConcreteHandler1 handler1 = new ConcreteHandler1();
//創建處理者2鏈條
ConcreteHandler2 handler2 = new ConcreteHandler2();
//串聯鏈條
handler1.mNextHandler = handler2;
//請求者1
ConcreteRequest1 request1 = new ConcreteRequest1();
//請求者2
ConcreteRequest2 request2 = new ConcreteRequest2();
//從handler1開始處理
handler1.handleRequest(request1);
handler1.handleRequest(request2);
}