寶劍鋒從磨礪出……
          塵世中一個迷途小書童
          posts - 3,comments - 0,trackbacks - 0
          1:Filter接口,每個擴展都需要實現此接口
           1 /**
           2  * 過濾器。自定義的過濾器需要實現此接口<br>
           3  * 可以根據需求決定是否允許繼續流轉,如果需要,則調用<br>
           4  * chain.doFilter()方法繼續。如果不調用,則責任鏈終止。
           5  * 
           6  * @author kzl
           7  * 
           8  */
           9 public interface Filter {
          10     /**
          11      * 執行過濾
          12      * 
          13      * @param chain
          14      *            過濾責任鏈
          15      */
          16     void doFilter(IFilterChain chain);
          17 }
          18 

          2:責任鏈接口,用來控制過濾器是否繼續執行
          /**
           * 過濾器責任鏈
           * 
           * 
          @author kzl
           * 
           
          */
          public interface IFilterChain {
              
          /**
               * 執行過濾
               
          */
              
          void doFilter();
          }

          3:過濾器組,用來添加自定義的過濾器
           1 /**
           2  * 過濾器組
           3  * 
           4  * @author kzl
           5  * 
           6  */
           7 public interface FilterGroup {
           8     /**
           9      * 添加過濾器
          10      * 
          11      * @param filter
          12      *            過濾器
          13      * @return 返回此過濾器組,允許繼續添加
          14      */
          15     FilterGroup append(Filter filter);
          16 
          17     /**
          18      * 執行過濾操作
          19      * 
          20      * @param chain
          21      *            過濾器責任鏈
          22      */
          23     void doFilter(FilterChain chain);
          24 }
          25 

          下面給出簡單的實現類:
          1:Filter1
           1 import java.text.SimpleDateFormat;
           2 import java.util.Date;
           3 
           4 public class Filter1 implements Filter {
           5 
           6     @Override
           7     public void doFilter(IFilterChain chain) {
           8         System.out.println(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss")
           9                 .format(new Date(1256819348330l)));
          10         chain.doFilter();
          11     }
          12 
          13 }
          14 

          2:FilterChain
          /**
           * 過濾器責任鏈
           * 
           * 
          @author kzl
           * 
           
          */
          public class FilterChain implements IFilterChain {
              
          /**
               * 過濾器組
               
          */
              FilterGroup group;

              
          public FilterChain(FilterGroup group) {
                  
          this.group = group;
              }

              @Override
              
          public void doFilter() {
                  
          // 過濾器組執行
                  group.doFilter(this);
              }
          }

          3:FilterGroup
           1 import java.util.LinkedList;
           2 
           3 public class FilterGroupImpl implements FilterGroup {
           4     LinkedList<Filter> list = new LinkedList<Filter>();
           5     int current = 0;
           6 
           7     @Override
           8     public synchronized FilterGroup append(Filter filter) {
           9         list.add(filter);
          10         return this;
          11     }
          12 
          13     @Override
          14     public void doFilter(FilterChain chain) {
          15         if (current < list.size()) {
          16             list.get(current++).doFilter(chain);
          17         }
          18     }
          19 
          20 }
          21 

          4:最終組合起來的main
           1 public class Main {
           2     public static void main(String[] args) {
           3         FilterGroup group = new FilterGroupImpl();
           4         group.append(new Filter1());
           5         group.append(new Filter2());
           6         FilterChain chain = new FilterChain(group);
           7         chain.doFilter();
           8     }
           9 }
          10 

          posted on 2009-11-26 13:35 ☆倚樓聽雨☆ 閱讀(150) 評論(0)  編輯  收藏 所屬分類: java
          主站蜘蛛池模板: 娄底市| 民乐县| 榆林市| 阳曲县| 义马市| 宝清县| 湖口县| 桃江县| 枣庄市| 广南县| 什邡市| 石阡县| 汕头市| 沙坪坝区| 墨竹工卡县| 社旗县| 南通市| 山阴县| 玉龙| 邛崃市| 盱眙县| 工布江达县| 博湖县| 公安县| 乌拉特前旗| 阿克| 罗山县| 卢龙县| 新野县| 崇文区| 德安县| 武陟县| 尼木县| 恭城| 瓦房店市| 什邡市| 道孚县| 那坡县| 罗田县| 京山县| 浦城县|