1. 程式人生 > 實用技巧 >責任鏈模式

責任鏈模式

職責鏈模式(Chain ofResponsibility):使多個物件都有機會處理請求,從而避免請求的傳送者和接收者
之間的耦合關係。將這個物件連成一條鏈,並沿著這條鏈傳遞該請求,直到有一個物件處理它為止。

當客戶有一個請求時,請求是沿鏈傳遞直到有一個ConcreteHandle物件負責處理它;

接收者和傳送者都沒有對方明確的資訊,且鏈中的物件也不知道鏈的結構。
結果是責任鏈可簡化物件的相互連線,它們僅需保持一個指向其後繼者的引用,而不
需保持它所有的候選接收者的引用。

實現程式碼示例:

 1 public abstract class Handle {
 2     protected
Handle successor; 3 4 public void setSuccessor(Handle successor) { 5 this.successor = successor; 6 } 7 8 public abstract void handleRequest(int request); 9 10 }
Handle
 1 public class ConcreteHandleA extends Handle {
 2 
 3     @Override
 4     public void
handleRequest(int request) { 5 if(request>=0 && request<10){ 6 System.out.println("處理完成---"+request); 7 }else{ 8 successor.handleRequest(request); 9 } 10 } 11 12 }
ConcreteHandleA
 1 public class ConcreteHandleB extends Handle {
2 3 @Override 4 public void handleRequest(int request) { 5 if(request>=10 && request<20){ 6 System.out.println("處理完成---"+request); 7 }else{ 8 successor.handleRequest(request); 9 } 10 11 } 12 13 }
ConcreteHandleB
 1 public class ConcreteHandleC extends Handle {
 2 
 3     @Override
 4     public void handleRequest(int request) {
 5         if(request>=20 && request<40){
 6             System.out.println("處理完成---"+request);
 7         }else{
 8             successor.handleRequest(request);
 9         }
10 
11     }
12 
13 }
ConcreteHandleC
 1 public class HandleTest {
 2 
 3     public static void main(String[] args) {
 4         Handle h1 = new ConcreteHandleA(); 
 5         Handle h2 = new ConcreteHandleB(); 
 6         Handle h3 = new ConcreteHandleC(); 
 7         
 8         h1.setSuccessor(h2);
 9         h2.setSuccessor(h3);
10         int[] arr = {2,15,27,11,38,16,9};
11         for (int i = 0; i < arr.length; i++) {
12             h1.handleRequest(arr[i]);
13         }
14     }
15 
16 }
test
處理完成---2
處理完成---15
處理完成---27
處理完成---11
處理完成---38
處理完成---16
處理完成---9
測試列印