責任鏈模式
阿新 • • 發佈:2020-07-29
職責鏈模式(Chain ofResponsibility):使多個物件都有機會處理請求,從而避免請求的傳送者和接收者
之間的耦合關係。將這個物件連成一條鏈,並沿著這條鏈傳遞該請求,直到有一個物件處理它為止。
當客戶有一個請求時,請求是沿鏈傳遞直到有一個ConcreteHandle物件負責處理它;
接收者和傳送者都沒有對方明確的資訊,且鏈中的物件也不知道鏈的結構。
結果是責任鏈可簡化物件的相互連線,它們僅需保持一個指向其後繼者的引用,而不
需保持它所有的候選接收者的引用。
實現程式碼示例:
1 public abstract class Handle { 2 protectedHandleHandle successor; 3 4 public void setSuccessor(Handle successor) { 5 this.successor = successor; 6 } 7 8 public abstract void handleRequest(int request); 9 10 }
1 public class ConcreteHandleA extends Handle { 2 3 @Override 4 public voidConcreteHandleAhandleRequest(int request) { 5 if(request>=0 && request<10){ 6 System.out.println("處理完成---"+request); 7 }else{ 8 successor.handleRequest(request); 9 } 10 } 11 12 }
1 public class ConcreteHandleB extends Handle {ConcreteHandleB2 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 }
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測試列印