责任链模式

简介

行为型模式,让一个请求通过一系列的对象组成的链,解耦请求者和接收者;下图中的抽象类也可以是接口,在抽象类中可以保持下一个拦截器的引用。在接口中,可以使用一个专门的拦截器链类通过集合的方式持有所有的拦截器实例,之后依次遍历集合中的元素来完成对应的操作。本文的代码使用接口的方法。

 

使用场景

拦截器、过滤器

具体代码

1 public interface Filter {
2     public void doSomething(FilterChain filterChain);
3 }
Filter
 1 public class AFilter implements Filter {
 2     @Override
 3     public void doSomething(FilterChain filterChain) {
 4         System.out.println("AFilter is doing something!");
 5         filterChain.doJob();
 6         System.out.println("AFilter done!");
 7     }
 8 }
 9 public class BFilter implements Filter {
10     @Override
11     public void doSomething(FilterChain filterChain) {
12         System.out.println("BFilter is doing something!");
13         filterChain.doJob();
14         System.out.println("BFilter done!");
15     }
16 }
17 public class CFilter implements Filter {
18     @Override
19     public void doSomething(FilterChain filterChain) {
20         System.out.println("CFilter is doing something!");
21         filterChain.doJob();
22         System.out.println("CFilter done!");
23     }
24 }
FilterImpl
 1 public class FilterChain {
 2     private int id = 0;
 3     private ArrayList<Filter> list = new ArrayList<>();
 4 
 5     public FilterChain addFilter(Filter filter){
 6         list.add(filter);
 7         return this;
 8     }
 9 
10     public void doJob(){
11         if (id == list.size())
12             return;
13         Filter filter = list.get(id++);
14         filter.doSomething(this);
15     }
16 }
FilterChain
 1 public class mainDemo {
 2     public static void main(String[] args) {
 3         FilterChain filterChain = new FilterChain();
 4         AFilter aFilter = new AFilter();
 5         BFilter bFilter = new BFilter();
 6         CFilter cFilter = new CFilter();
 7         filterChain.addFilter(aFilter).addFilter(bFilter).addFilter(cFilter);
 8         filterChain.doJob();
 9     }
10 }
mainDemo

 

posted @ 2020-06-08 08:57  G港钢枪  阅读(35)  评论(0)    收藏  举报