问题:现在已经有一个责任链了,现在想将这个责任链加到java设计模式--责任链(一)的责任链中去,如果还沿用之前的方法,扩展性方面不足。
解决方案:新建一个FilterChain类,同样也继承Filter接口,其代码如下:
package chanOfResponsibility;
import java.util.ArrayList;
import java.util.List;
public class FilterChain implements Filter{
private List<Filter> filters = new ArrayList<Filter>();
@Override
public String doFilter(String msg) {
for(Filter f : filters){
msg = f.doFilter(msg);
}
return msg;
}
public FilterChain addFilter(Filter f){
filters.add(f);
return this;
}
}
FilterChain有一个addFilter方法,可以新增许多的Filter作为一个整体的Filter。这里之所以return this主要是为了方便一次新增多个Filter,即类似xx.addFilter(f1).addFilter(f2)。
新增了FilterChain这个链之后,MsgDealer可修改为下面:
package chanOfResponsibility;
public class MsgDealer {
private FilterChain filterChain;
public FilterChain getFilterChain() {
return filterChain;
}
public void setFilterChain(FilterChain filterChain) {
this.filterChain = filterChain;
}
public String dealMsg(String msg){
return filterChain.doFilter(msg);
}
}
Main:
package chanOfResponsibility;
public class Main {
public static void main(String[] args) {
String msg = "java知识点好多,需要花好多时间精力去学。好像出去旅游。";
//过滤链
FilterChain filterChain = new FilterChain();
filterChain.addFilter(new SymbolFilter()).addFilter(new CharacterFilter());
MsgDealer msgDealer = new MsgDealer();
msgDealer.setFilterChain(filterChain);
msg = msgDealer.dealMsg(msg);
System.out.println(msg);
}
}
这样形成了一个更进一步的责任链。
未完待续。。。。
以上为个人观点,如有错误,欢迎指正!