行爲模式---之--責任鏈模式

責任鏈模式是一種對象的行爲模式。在責任鏈模式裏,不少對象由每個對象對其下家的引用而鏈接造成一條鏈。請求在這個鏈上傳遞,直到鏈上的某一個對象決定處理此請求。發出這個請求的客戶端並不知道鏈上的哪個對象最終處理這個請求,這使得系統能夠在不影響客戶端的狀況下動態地從新組織鏈和分配責任。
 
角色:
1.抽象處理者(Handler):定義出一個處理請求的接口。若是須要,接口能夠定義出一個方法,以設定的返回對下家的引用。這個角色一般由一個Java抽象類或者Java接口實現。
2.具體處理者(ConcreteHandler)角色:具體處理者接到請求後,能夠選擇將請求處理掉,或者將請求傳給下家。因爲具體處理者持有對下家的引用,所以,若是須要,具體處理者能夠訪問下家。
 
示例代碼:
 1 public class ChainTest {
 2     private static Handler handler1,handler2;
 3     public static void main(String[] args) {
 4         handler1 = new ConcreteHandler();
 5         handler2 = new ConcreteHandler();
 6         handler1.setSuccessor(handler2);
 7         handler1.handleRequest();
 8     }
 9 
10 }
11 //抽象處理者
12 abstract class Handler{
13     protected Handler successor;
14     //調用此處理方法處理請求
15     public abstract void handleRequest();
16     //賦值方法,調用此方法設定下家
17     public void setSuccessor(Handler successor){
18         this.successor = successor;
19     }
20     //取值方法
21     public Handler getSuccessor(){
22         return successor;
23     }
24 }
25 
26 //具體處理者
27 class ConcreteHandler extends Handler{
28     
29     @Override
30     public void handleRequest() {
31         if(getSuccessor()!=null){
32             System.out.println("The request is passed to "+ getSuccessor());
33             getSuccessor().handleRequest();
34         }else{
35             System.out.println("The request is handled here");
36         }
37     }
38     
39 }

 

純與不純責任鏈模式:
一個純的責任鏈模式要求一個具體的處理者對象只能在兩個行爲中選擇一個:一是承擔責任,二是把責任推給下家。不容許出現某一個具體處理者對象在承擔了一部分責任後又把責任向下傳的狀況。
    在一個純的責任鏈模式裏,一個請求必須被某一個處理者對象所接收;在 一個不純的責任鏈模式裏面,一個請求能夠最終不被任何接收端對象所接收。純的責任鏈模式的實際例子很難找到,通常看到的例子均是不純的責任鏈模式的實現。
 
責任鏈模式減低了請求的發送端和接收端之間的耦合,使多個對象都有機會處理這個請求。一個鏈能夠是一條線,一個樹,也能夠是一個環。鏈的拓撲結構能夠是單連通的或多連通的,責任鏈模式並不指定責任鏈的拓撲結構。可是責任鏈模式要求在同一個時間裏,命令只能夠被傳給一個下家(或被處理掉),而不能夠傳給多於一個下家。
相關文章
相關標籤/搜索