看代码是学程序最好的方法,先看代码:
package rowsy.learn;
import java.util.ArrayList;
interface Filter {
public void doFilter(String request);
}
class Filter1 implements Filter {
@Override
public void doFilter(String request) {
System.out.println("do filter 1");
}
}
class Filter2 implements Filter {
@Override
public void doFilter(String request) {
System.out.println("do filter 2");
}
}
class FilterChain implements Filter {
private ArrayList<Filter> filterChain = new ArrayList<Filter>();
public FilterChain addFilter(Filter filter) {
filterChain.add(filter);
return this;
}
@Override
public void doFilter(String request) {
for (Filter filter : filterChain) {
filter.doFilter(request);
}
}
}
public class ChainOfResponsibility {
public static void main(String[] args) {
FilterChain filterChain = new FilterChain();
filterChain.addFilter(new Filter1()).addFilter(new Filter2())
.addFilter(new Filter1());
filterChain.doFilter("hello");
}
}
运行结果输出:
do filter 1
do filter 2
do filter 1
职责链设计模式主要解决的问题是让多个对象都有机会处理请求,从而避免请求的发送者和请求的接受者的耦合关系。
将处理请求的对象连成一个链,请求按照这个链依次传递,直到请求被处理为止。