1 /**
2 * 榪囨護(hù)鍣ㄣ傝嚜瀹氫箟鐨勮繃婊ゅ櫒闇瑕佸疄鐜版鎺ュ彛<br>
3 * 鍙互鏍規(guī)嵁闇姹傚喅瀹氭槸鍚﹀厑璁哥戶緇祦杞紝濡傛灉闇瑕侊紝鍒欒皟鐢?lt;br>
4 * chain.doFilter()鏂規(guī)硶緇х畫銆傚鏋滀笉璋冪敤錛屽垯璐d換閾劇粓姝€?br />
5 *
6 * @author kzl
7 *
8 */
9 public interface Filter {
10 /**
11 * 鎵ц榪囨護(hù)
12 *
13 * @param chain
14 * 榪囨護(hù)璐d換閾?br />
15 */
16 void doFilter(IFilterChain chain);
17 }
18
2:璐d換閾炬帴鍙o紝鐢ㄦ潵鎺у埗榪囨護(hù)鍣ㄦ槸鍚︾戶緇墽琛?br />
/**
* 榪囨護(hù)鍣ㄨ矗浠婚摼
*
* @author kzl
*
*/
public interface IFilterChain {
/**
* 鎵ц榪囨護(hù)
*/
void doFilter();
}
3:榪囨護(hù)鍣ㄧ粍錛岀敤鏉ユ坊鍔犺嚜瀹氫箟鐨勮繃婊ゅ櫒
1 /**
2 * 榪囨護(hù)鍣ㄧ粍
3 *
4 * @author kzl
5 *
6 */
7 public interface FilterGroup {
8 /**
9 * 娣誨姞榪囨護(hù)鍣?br />
10 *
11 * @param filter
12 * 榪囨護(hù)鍣?br />
13 * @return 榪斿洖姝よ繃婊ゅ櫒緇?鍏佽緇х畫娣誨姞
14 */
15 FilterGroup append(Filter filter);
16
17 /**
18 * 鎵ц榪囨護(hù)鎿嶄綔
19 *
20 * @param chain
21 * 榪囨護(hù)鍣ㄨ矗浠婚摼
22 */
23 void doFilter(FilterChain chain);
24 }
25
涓嬮潰緇欏嚭綆鍗曠殑瀹炵幇綾伙細(xì)
1錛欶ilter1
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
/**
* 榪囨護(hù)鍣ㄨ矗浠婚摼
*
* @author kzl
*
*/
public class FilterChain implements IFilterChain {
/**
* 榪囨護(hù)鍣ㄧ粍
*/
FilterGroup group;
public FilterChain(FilterGroup group) {
this.group = group;
}
@Override
public void doFilter() {
// 榪囨護(hù)鍣ㄧ粍鎵ц
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

]]>