責任鏈模式

壹頁書發表於2017-03-20
http://www.cnblogs.com/java-my-life/archive/2012/05/28/2516865.html




  1. abstract class Handler {  
  2.   
  3.     /** 
  4.      * 持有後繼的責任物件 
  5.      */  
  6.     protected Handler successor;  
  7.   
  8.     /** 
  9.      * 示意處理請求的方法,雖然這個示意方法是沒有傳入引數的 但實際是可以傳入引數的,根據具體需要來選擇是否傳遞引數 
  10.      */  
  11.     public abstract void handleRequest();  
  12.   
  13.     /** 
  14.      * 取值方法 
  15.      */  
  16.     public Handler getSuccessor() {  
  17.         return successor;  
  18.     }  
  19.   
  20.     /** 
  21.      * 賦值方法,設定後繼的責任物件 
  22.      */  
  23.     public void setSuccessor(Handler successor) {  
  24.         this.successor = successor;  
  25.     }  
  26.   
  27. }  
  28.   
  29. class ConcreteHandler extends Handler {  
  30.     /** 
  31.      * 處理方法,呼叫此方法處理請求 
  32.      */  
  33.     @Override  
  34.     public void handleRequest() {  
  35.         /** 
  36.          * 判斷是否有後繼的責任物件 如果有,就轉發請求給後繼的責任物件 如果沒有,則處理請求 
  37.          */  
  38.         if (getSuccessor() != null) {  
  39.             System.out.println("放過請求");  
  40.             getSuccessor().handleRequest();  
  41.         } else {  
  42.             System.out.println("處理請求");  
  43.         }  
  44.     }  
  45.   
  46. }  
  47.   
  48. class Client {  
  49.   
  50.     public static void main(String[] args) {  
  51.         // 組裝責任鏈  
  52.         Handler handler1 = new ConcreteHandler();  
  53.         Handler handler2 = new ConcreteHandler();  
  54.         handler1.setSuccessor(handler2);  
  55.         // 提交請求  
  56.         handler1.handleRequest();  
  57.     }  
  58.   


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/29254281/viewspace-2135693/,如需轉載,請註明出處,否則將追究法律責任。

相關文章