拦截器模式
文章目录
拦截器模式在 Web 应用的 Fitler 中有应用,对于流式的数据流处理很有用。比如对于 Shell 命令的管道可以采用拦截器模式,提供一个命令的接口,并使用一个 Chain 来进行管理。
拦截器的基本类结构用 UML 类图的方式进行表示:
其中 Filter 提供一个统一的接口, Chain 用来管理所有的 Filter,并提供一个doNext()
方法来进行下一个拦截器的执行。
下面给出一个拦截器模式的示例代码:
public abstract class Command {
protected List<Character> options;
protected List<String> params;
public Command() {
options = Lists.newArrayList();
params = Lists.newArrayList();
}
public List<Character> getOptions() {
return options;
}
public void setOptions(List<Character> options) {
this.options = options;
}
public List<String> getParams() {
return params;
}
public void setParams(List<String> params) {
this.params = params;
}
public abstract String execute(CommandChain chain, String data);
}
public class CommandChain {
private List<Command> commandList;
private int index;
public CommandChain(List<Command> commandList) {
this.commandList = commandList;
}
public String doNext(String data) {
if (commandList.size() <= index) {
return data;
} else {
return commandList.get(index++).execute(this, data);
}
}
}