Process 就是一个接口了,用于定义真正的处理函数。
public interface Process {
/**
* 执行处理
* @param msg
*/
void doProcess(String msg) ;
}
同时之前对内容的各种处理只需要实现该接口即可:
public class AProcess implements Process {
@Override
public void doProcess(String msg) {
System.out.println(msg + "A处理");
}
}
public class BProcess implements Process {
@Override
public void doProcess(String msg) {
System.out.println(msg + "B处理");
}
}
public class CProcess implements Process {
@Override
public void doProcess(String msg) {
System.out.println(msg + "C处理");
}
}
然后只需要给客户端提供一个执行入口以及添加责任链的入口即可:
public class MyProcessChain {
private List<Process> chains = new ArrayList<>() ;
/**
* 添加责任链
* @param process
* @return
*/
public MyProcessChain addChain(Process process){
chains.add(process) ;
return this ;
}
/**
* 执行处理
* @param msg
*/
public void process(String msg){
for (Process chain : chains) {
chain.doProcess(msg);
}
}
}
这样使用起来就非常简单:
public class Main {
public static void main(String[] args) {
String msg = "内容内容内容==" ;
MyProcessChain chain = new MyProcessChain()
.addChain(new AProcess())
.addChain(new BProcess())
.addChain(new BProcess()) ;
chain.process(msg) ;
}
}
当我需要再增加一个处理逻辑时只需要添加一个处理单元即可(addChain(Process process)),并对客户端 chain.process(msg) 是无感知的,不需要做任何的改动。
典型的拦截器 就是责任链模式