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 * 過濾器。自定義的過濾器需要實現此接口<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();
}
* 過濾器責任鏈
*
* @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
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 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* 過濾器責任鏈
*
* @author kzl
*
*/
public class FilterChain implements IFilterChain {
/**
* 過濾器組
*/
FilterGroup group;
public FilterChain(FilterGroup group) {
this.group = group;
}
@Override
public void doFilter() {
// 過濾器組執行
group.doFilter(this);
}
}
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
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
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