(Chain of Responsibility Pattern)
责任链模式相信不少人在工做中也接触过。java
顾名思义,责任链模式(Chain of Responsibility Pattern)为请求建立了一个接收者对象的链。这种模式给予请求的类型,对请求的发送者和接收者进行解耦。这种类型的设计模式属于行为型模式。
在这种模式中,一般每一个接收者都包含对另外一个接收者的引用。若是一个对象不能处理该请求,那么它会把相同的请求传给下一个接收者,依此类推。编程
上面的一大堆看不懂,那咱们经过几个例子进行解析,看完例子相信,你能够直接用本身的话,解释什么是责任链模式设计模式
/** * 为了实现filter链条的顺序执行依赖于上一个Filter的返回值 * 修改Filter中的doFilter的返回类型为boolean */ interface Filter { boolean doFilter(Msg msg); }
//过滤链 class FilterChain implements Filter { List<Filter> filters = new ArrayList<>(16); //直接返回FilterChain,再进行add时代码易读性增大(链式编程) public FilterChain add(Filter filter) { filters.add(filter); return this; } public void remove(Filter filter) { filters.remove(filter); } public boolean doFilter(Msg msg) { for (Filter filter : filters) { if(!filter.doFilter(msg)){ return false; } } return true; } }
public class Main { public static void main(String[] args) { Msg msg = new Msg(); msg.setMsg("你们好:); <script> ,欢迎访问 taobao.com ,你们都是996"); FilterChain filterChain = new FilterChain(); filterChain.add(new HtmlFilter()).add(new SensitiveFilter()); FilterChain filterChain2 = new FilterChain(); filterChain2.add(new EmjogFilter()).add(new UrlFilter()); /** * 让FilterChain实现Filter接口,这个链条也能够看成是一个Filter加到别的链条上去 */ filterChain.add(filterChain2); filterChain.doFilter(msg); System.out.println(msg); } }
测试程序中将过滤器,分别放到了两个FilterChain.
其一:演示责任链的工做流程
其二:演示链条与链条之间的处理
这样就经过责任链模式,简单的实现了过滤操做。测试