責任鏈模式

 先附上代碼:

 

  1. package com.hbq.chain; 
  2.  
  3. import java.util.ArrayList; 
  4. import java.util.Random; 
  5.  
  6. interface IWomen 
  7.     public int getType(); 
  8.     public String getRequest();  
  9.  
  10. class Women implements IWomen 
  11.     private int type = 0 ; 
  12.     private String request = "" ; 
  13.      
  14.     public Women(int type,String req) 
  15.     { 
  16.         this.type = type ; 
  17.         switch(this.type) 
  18.         { 
  19.         case 1
  20.             this.request = "女兒的請求是:"+req ; 
  21.             break
  22.         case 2
  23.             this.request = "妻子的請求是:"+req ; 
  24.             break
  25.         case 3
  26.             this.request = "母親的請求是:"+req ; 
  27.             break
  28.         } 
  29.     } 
  30.  
  31.     @Override 
  32.     public int getType() { 
  33.         // TODO Auto-generated method stub 
  34.         return this.type; 
  35.     } 
  36.  
  37.     @Override 
  38.     public String getRequest() { 
  39.         // TODO Auto-generated method stub 
  40.         return this.request; 
  41.     } 
  42.      
  43.  
  44. public abstract class Handler { 
  45.     private int level = 0 ; 
  46.     private Handler next = null ; 
  47.      
  48.     public Handler(int l,Handler n) 
  49.     { 
  50.         this.level = l ; 
  51.         this.next = n ; 
  52.     } 
  53.      
  54.     public Handler(int level) 
  55.     { 
  56.         this.level = level ; 
  57.     } 
  58.      
  59.     public void setNext(Handler next) 
  60.     { 
  61.         this.next = next ; 
  62.     } 
  63.      
  64.     public abstract void response(IWomen women); 
  65.      
  66.     /*每個環節只有2個選項:要麼承擔責任作出迴應,要麼向下傳*/ 
  67.     public void handleMsg(IWomen women) 
  68.     { 
  69.         if(this.level == women.getType()) 
  70.             this.response(women); 
  71.         else 
  72.         { 
  73.             ifthis.next != null ) 
  74.             { 
  75.                 this.next.handleMsg(women); 
  76.             } 
  77.             else 
  78.                 System.out.println("-----------沒有地方請示了,不做處理!-----------\n"); 
  79.         } 
  80.     } 
  81.  
  82. class Father extends Handler 
  83.  
  84.     public Father() { 
  85.         super(1); 
  86.         // TODO Auto-generated constructor stub 
  87.     } 
  88.  
  89.     @Override 
  90.     public void response(IWomen women) { 
  91.         // TODO Auto-generated method stub 
  92.         System.out.println("-----------女兒向父親請示------------"); 
  93.         System.out.println(women.getRequest()); 
  94.         System.out.println("父親的回答是:同意\n"); 
  95.     } 
  96.      
  97.  
  98. class Son extends Handler 
  99.  
  100.     public Son() { 
  101.         super(3); 
  102.         // TODO Auto-generated constructor stub 
  103.     } 
  104.  
  105.     @Override 
  106.     public void response(IWomen women) { 
  107.         // TODO Auto-generated method stub 
  108.         System.out.println("-----------母親向兒子請示------------"); 
  109.         System.out.println(women.getRequest()); 
  110.         System.out.println("兒子的回答是:同意\n"); 
  111.     } 
  112.      
  113.  
  114. class Husband extends Handler 
  115.  
  116.     public Husband() { 
  117.         super(2); 
  118.         // TODO Auto-generated constructor stub 
  119.     } 
  120.  
  121.     @Override 
  122.     public void response(IWomen women) { 
  123.         // TODO Auto-generated method stub 
  124.         System.out.println("-----------妻子向丈夫請示------------"); 
  125.         System.out.println(women.getRequest()); 
  126.         System.out.println("丈夫的回答是:同意\n"); 
  127.     } 
  128.      
  129.  
  130. class client 
  131.     public static void main(String[] args) 
  132.     { 
  133.         /*隨機設置一些Women*/ 
  134.         Random rand = new Random(); 
  135.         ArrayList<IWomen> arrayList = new ArrayList(); 
  136.          
  137.         forint i = 0 ; i < 5 ; i++)  
  138.         { 
  139.             int j = rand.nextInt(4) ; 
  140.             arrayList.add(new Women(j,"我要出去逛街")); 
  141.             //System.out.print(j); 
  142.         } 
  143.          
  144.         //System.out.println("\n"); 
  145.          
  146.          
  147.         Father father = new Father(); 
  148.         Son son = new Son(); 
  149.         Husband husband = new Husband(); 
  150.          
  151.         father.setNext(husband); 
  152.         husband.setNext(son); 
  153.          
  154.         for( IWomen women:arrayList) 
  155.         { 
  156.             /*在責任鏈模式下,不用關注最終處理的對象是誰,由鏈表的形式往下傳*/ 
  157.             father.handleMsg(women); 
  158.         } 
  159.     } 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章