職責鏈模式:使多個對象都有機會處理請求,從而避免請求的發送者和接收者之間的耦合關係。將這個對象連成一條鏈,並沿着這條鏈傳遞該請求,直到有一個對象處理它爲止
職責鏈模式適合 當客戶提交一個請求時,請求是沿鏈傳遞直至有一個ConcreteHandler對象負責處理它,例如:審批流程,請求流程等
UML:
JAVA:
public class ResponsibilityTest {
public static void main(String[] args) {
Handler h1 = new ConcreteHandler1();
Handler h2 = new ConcreteHandler2();
h1.setSuccessor(h2);
int[] requests = {2,5,14,3};
for (int r :requests ) {
h1.handleRequest(r);
}
}
}
abstract class Handler{
protected Handler successor;
public void setSuccessor(Handler successor) {
this.successor = successor;
}
public abstract void handleRequest(int request);//處理請求的抽象方法
}
class ConcreteHandler1 extends Handler{
@Override
public void handleRequest(int request) {
if (request >= 0 && request < 10){
System.out.println(this.getClass().getName()+" 處理請求"+request);
}else if (successor != null){
successor.handleRequest(request);
}
}
}
class ConcreteHandler2 extends Handler{
@Override
public void handleRequest(int request) {
if (request >= 10 && request < 20){
System.out.println(this.getClass().getName()+" 處理請求"+request);
}else if (successor != null){
successor.handleRequest(request);
}
}
}