前言
在 GoF 的《设计模式》中,它是这么定义的:
Avoid coupling the sender of a request to its receiver by giving more than one object a chance to handle the request. Chain the receiving objects and pass the request along the chain until an object handles it.
翻译成中文就是:将请求的发送和接收解耦,让多个接收对象都有机会处理这个请求。将这些接收对象串成一条链,并沿着这条链传递这个请求,直到链上的某个接收对象能够处理它为止。
注意:责任链一般有两种实现方式:
- 第一种就是GoF给出的定义那样:当责任链上的某一个处理器处理掉请求之后,就不会往下继续传递了。
- 第二种就是其变体:请求会被所有的处理器处理,不会中途停止。
第一种实现
public interface Handler {
boolean doHandle();
}
class HandlerImpl_One implements Handler {
public boolean doHandle() {
boolean isHandleSuccess=false;
System.out.println("正在执行处理器:HandlerImpl_One");
isHandleSuccess=true;
return isHandleSuccess;
}
}
class HandlerImpl_Two implements Handler {
public boolean doHandle() {
boolean isHandleSuccess=false;
System.out.println("正在执行处理器:HandlerImpl_Two");
return isHandleSuccess;
}
}
public class HandlerChain {
List<Handler> handlers=new ArrayList<Handler>();
void addHandler(Handler handler){
handlers.add(handler);
}
boolean doHandle(){
boolean isHandleSuccess=false;
for (Handler handler : handlers) {
isHandleSuccess = handler.doHandle();
if(isHandleSuccess){
return isHandleSuccess;
}
}
return isHandleSuccess;
}
}
第二种实现
public interface Filter {
void doFilter();
}
class FilterImpl_One implements Filter {
public void doFilter() {
System.out.println("正在执行过滤器:FilterImpl_One");
}
}
class FilterImpl_Two implements Filter {
public void doFilter() {
System.out.println("正在执行过滤器:FilterImpl_Two");
}
}
public class FilterChain {
List<Filter> filters=new ArrayList<Filter>();
void addFilter(Filter filter){
filters.add(filter);
}
void doFilters(){
for (Filter filter : filters) {
filter.doFilter();
}
}
}