责任链模式本质就是链表结构。
通过设置下一个处理者,完成对目标对象的流程化处理。
直接上代码示例:
/** 抽象处理者 **/
abstract class Handler{
private Handler nextHandler;
public void setNextHandler(Handler next){
this.nextHandler = next;
}
public void nextProcess(String type){
if(nextHandler != null){
nextHandler.process(type);
}
}
public abstract void process(String type);
}
/**具体处理类 HandlerA **/
class HandlerA extends Handler{
@Override
public void process(String type){
if("A".equals(type)){
System.out.println("dealing type A");
} else {
nextProcess(type);
}
}
}
/**具体处理类 HandlerB **/
class HandlerB extends Handler{
@Override
public void process(String type){
if("B".equals(type)){
System.out.println("dealing type B");
} else {
nextProcess(type);
}
}
}
/**具体处理类 HandlerC **/
class HandlerC extends Handler{
@Override
public void process(String type){
if("C".equals(type)){
System.out.println("dealing type C");
} else {
nextProcess(type);
}
}
}
public class Main{
public static void main(String[] args){
Handler a = new HandlerA();
Handler b = new HandlerB();
Handler c = new HandlerC();
// 构建责任链 a->b->c
a.setNextHandler(b);
b.setNextHandler(c);
a.process("C");
a.process("B");
a.process("A");
}
}
Java 中使用责任链模式的有:
- Logger#log() 日志处理机制;
- 过滤链 Filter#doFilter()