設計模式之過濾器模式
阿新 • • 發佈:2020-07-18
博主上次分析完cas客戶端原始碼後,發現了其實就是一個過濾器模式,對請求以及session一直做校驗,每個過濾器都有各自的工作,互不影響耦合性低,所以就模仿其原始碼,做了一次過濾器模式的學習,圖示如下
其實過濾器整個類可以不用,只不過在jetty中,過濾器整合類不知有過濾器還有其他屬性,比如config配置等。如下:參考即可
好了,我們來看一下過濾器模式,一個過濾器介面定義方法,多個實現類去實現具體操作過濾,一個整合類增加一個過濾器,一個過濾器連結串列去實現以節點型別,依次進行過濾
該介面進行定義方法:
1 import java.io.IOException; 2 import java.util.List; 3 4 /** 5 * @title: DemoFilter 6 * @Author junyu 7 * 舊巷裡有一個穿著白襯衫笑起來如太陽般溫暖我的少年。 8 * 記憶裡有一個穿著連衣裙哭起來如孩子般討人喜的女孩。 9 * 他說,哪年樹彎了腰,人見了老,桃花落了白髮梢,他講的笑話她還會笑,那便是好。 10 * 她說,哪年國改了號,墳長了草,地府過了奈何橋,她回頭看時他還在瞧,就不算糟。 11 * @Date: 2020/7/18 9:23 12 * @Version 1.0 13 */ 14 public interface DemoFilter{ 15 16 void doFilter(List list, DemoFilterChain demoFilterChain); 17 }
多個實現類:
1 import java.util.List; 2 3 /** 4 * @title: AFilterImpl 5 * @Author junyu 6 * 舊巷裡有一個穿著白襯衫笑起來如太陽般溫暖我的少年。 7 * 記憶裡有一個穿著連衣裙哭起來如孩子般討人喜的女孩。 8 * 他說,哪年樹彎了腰,人見了老,桃花落了白髮梢,他講的笑話她還會笑,那便是好。 9 * 她說,哪年國改了號,墳長了草,地府過了奈何橋,她回頭看時他還在瞧,就不算糟。 10 * @Date: 2020/7/18 11:58 11 * @Version 1.0 12 */ 13 public class AFilterImpl implements DemoFilter{ 14 15 @Override 16 public void doFilter(List list, DemoFilterChain demoFilterChain) { 17 System.out.println("AFilterImpl is beginning"); 18 if (list.isEmpty()) { 19 System.out.println("該列表為空,無需過濾!"); 20 return; 21 } 22 demoFilterChain.doFilter(list); 23 } 24 }
1 import java.util.List; 2 3 /** 4 * @title: BFilterImpl 5 * @Author junyu 6 * 舊巷裡有一個穿著白襯衫笑起來如太陽般溫暖我的少年。 7 * 記憶裡有一個穿著連衣裙哭起來如孩子般討人喜的女孩。 8 * 他說,哪年樹彎了腰,人見了老,桃花落了白髮梢,他講的笑話她還會笑,那便是好。 9 * 她說,哪年國改了號,墳長了草,地府過了奈何橋,她回頭看時他還在瞧,就不算糟。 10 * @Date: 2020/7/18 13:34 11 * @Version 1.0 12 */ 13 public class BFilterImpl implements DemoFilter{ 14 15 @Override 16 public void doFilter(List list, DemoFilterChain demoFilterChain) { 17 System.out.println("BFilterImpl is beginning"); 18 System.out.println("list`s body:"); 19 list.stream().forEach(one ->{ 20 System.out.print( one + ","); 21 }); 22 demoFilterChain.doFilter(list); 23 } 24 }
一個整合類
1 ** 2 * @title: FilterHolder 3 * @Author junyu 4 * 舊巷裡有一個穿著白襯衫笑起來如太陽般溫暖我的少年。 5 * 記憶裡有一個穿著連衣裙哭起來如孩子般討人喜的女孩。 6 * 他說,哪年樹彎了腰,人見了老,桃花落了白髮梢,他講的笑話她還會笑,那便是好。 7 * 她說,哪年國改了號,墳長了草,地府過了奈何橋,她回頭看時他還在瞧,就不算糟。 8 * @Date: 2020/7/18 9:21 9 * @Version 1.0 10 */ 11 public class FilterHolder{ 12 private transient DemoFilter filter; 13 14 public DemoFilter getFilter() { 15 return filter; 16 } 17 18 public void setFilter(DemoFilter filter) { 19 this.filter = filter; 20 } 21 }FilterHolder
一個過濾器連結串列
1 import java.util.List; 2 3 /** 4 * @title: DemoFilterChain 5 * @Author junyu 6 * 舊巷裡有一個穿著白襯衫笑起來如太陽般溫暖我的少年。 7 * 記憶裡有一個穿著連衣裙哭起來如孩子般討人喜的女孩。 8 * 他說,哪年樹彎了腰,人見了老,桃花落了白髮梢,他講的笑話她還會笑,那便是好。 9 * 她說,哪年國改了號,墳長了草,地府過了奈何橋,她回頭看時他還在瞧,就不算糟。 10 * @Date: 2020/7/18 9:35 11 * @Version 1.0 12 */ 13 public class DemoFilterChain{ 14 FilterHolder filterHolder; 15 DemoFilterChain next; 16 17 DemoFilterChain(List<DemoFilter> list){ 18 if (list.isEmpty()) { 19 return; 20 } 21 filterHolder = new FilterHolder(); 22 filterHolder.setFilter(list.get(0)); 23 list.remove(0); 24 next = new DemoFilterChain(list); 25 } 26 27 public void doFilter(List list) { 28 if (filterHolder != null) { 29 DemoFilter filter = filterHolder.getFilter(); 30 filter.doFilter(list,next); 31 } 32 } 33 }DemoFilterChain
進行測試
1 import java.util.ArrayList; 2 import java.util.List; 3 4 /** 5 * @title: TestMain 6 * @Author junyu 7 * 舊巷裡有一個穿著白襯衫笑起來如太陽般溫暖我的少年。 8 * 記憶裡有一個穿著連衣裙哭起來如孩子般討人喜的女孩。 9 * 他說,哪年樹彎了腰,人見了老,桃花落了白髮梢,他講的笑話她還會笑,那便是好。 10 * 她說,哪年國改了號,墳長了草,地府過了奈何橋,她回頭看時他還在瞧,就不算糟。 11 * @Date: 2020/7/18 13:40 12 * @Version 1.0 13 */ 14 public class TestMain { 15 16 public static void main(String[] args) { 17 List<DemoFilter> list = new ArrayList<>(); 18 AFilterImpl aFilter = new AFilterImpl(); 19 BFilterImpl bFilter = new BFilterImpl(); 20 list.add(aFilter); 21 list.add(bFilter); 22 DemoFilterChain demoFilterChain = new DemoFilterChain(list); 23 24 List<String> filterList = new ArrayList<>(); 25 filterList.add("this is filter string"); 26 filterList.add("this is filter end"); 27 28 demoFilterChain.doFilter(filterList); 29 30 } 31 }
輸出結果:
AFilterImpl is beginning
BFilterImpl is beginning
list`s body:
this is filter string,this is filter end,
編寫不易,如若轉載請寫明出處:https://www.cnblogs.com/guoxiaoyu/p/13335797.html
&n