成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

Java設計模式:責任鏈

開發 后端
責任鏈模式(Chain of Responsibility)的目標是使多個對象都有機會處理請求,從而避免請求的發送者和接收者之間的耦合關系。將這些對象連成一條鏈,并沿著這條鏈傳遞請求,直到有一個對象處理它為止。

責任鏈模式(Chain of Responsibility)的目標是使多個對象都有機會處理請求,從而避免請求的發送者和接收者之間的耦合關系。將這些對象連成一條鏈,并沿著這條鏈傳遞請求,直到有一個對象處理它為止。

在處理用戶的請求時可能要根據不同的情況對請求添加不同的處理邏輯,在這時候就可以利用責任鏈進行設計。當需要添加一個處理邏輯時可以很方便的添加一個處理的節點。

現在我們的需求是處理用戶的請求,將用戶提交的字符串信息進行層層處理,同時在處理完成之后返回結果時,也要對返回的字符串進行層層處理,而處理返回的情況時其處理的順序和先前是正好相反的順序。

首先建立用戶的請求和接收對象Request和Response:

  1. package com.lcq.filter;  
  2.  
  3. public class Request {  
  4.     String requestStr;  
  5.  
  6.     public String getRequestStr() {  
  7.         return requestStr;  
  8.     }  
  9.  
  10.     public void setRequestStr(String requestStr) {  
  11.         this.requestStr = requestStr;  
  12.     }  
  13.  
  14. }  
  1. package com.lcq.filter;  
  2.  
  3. public class Response {  
  4.     String responseStr;  
  5.  
  6.     public String getResponseStr() {  
  7.         return responseStr;  
  8.     }  
  9.  
  10.     public void setResponseStr(String responseStr) {  
  11.         this.responseStr = responseStr;  
  12.     }  
  13.  
  14. }  

我們將處理用戶信息的邏輯抽象成為一個個的過濾器,進一步抽象出過濾器接口Filter:

  1. package com.lcq.filter;  
  2.  
  3. public interface Filter {  
  4.     public void doFilter(Request request, Response response,FilterChain chain);  
  5.  
  6. }  

注意在Filte接口中doFilter方法參數中有FilterChain的一個變量,我們再建立FilterChain類:

  1. package com.lcq.filter;  
  2.  
  3. import java.util.ArrayList;  
  4. import java.util.List;  
  5.  
  6. public class FilterChain implements Filter {  
  7.     List<Filter> filters = new ArrayList<Filter>();  
  8.     int index = 0;  
  9.  
  10.     public FilterChain addFilter(Filter f) {  
  11.         this.filters.add(f);  
  12.         return this;  
  13.     }  
  14.  
  15.     @Override 
  16.     public void doFilter(Request request, Response response, FilterChain chain) {  
  17.         if (index == filters.size())  
  18.             return;  
  19.         Filter f = filters.get(index);  
  20.         index++;  
  21.         f.doFilter(request, response, chain);  
  22.     }  
  23. }  

在FilterChain中繼承了Filter接口,從而實現了doFilter方法,在FilterChain中又有一個index變量,該變量是用來標記當前訪問的是哪一個過濾器,這些過濾器是存放在ArrayList中的,這樣用戶在使用的時候就可以實現自己的過濾器,編寫自己的處理邏輯,從而將自己的過濾器添加到ArrayList中,再調用FilterChain的doFilter方法遍歷整個責任鏈。

下面我們編寫三個過濾器:

HTMLFilter類:

  1. package com.lcq.filter;  
  2.  
  3. /**  
  4.  * 過濾HTML中的腳本元素  
  5.  * @author lcq  
  6.  *  
  7.  */ 
  8. public class HTMLFilter implements Filter {  
  9.  
  10.     @Override 
  11.     public void doFilter(Request request, Response response,FilterChain chain) {  
  12.         request.requestStr = request.getRequestStr().replace("<""[")  
  13.                 .replace(">""] --------HTMLFilter");  
  14.         chain.doFilter(request, response, chain);  
  15.         response.responseStr += "--------HTMLFilter";  
  16.           
  17.     }  
  18.  
  19. }  

SesitiveFilter類:

  1. package com.lcq.filter;  
  2.  
  3. public class SesitiveFilter implements Filter {  
  4.  
  5.     @Override 
  6.     public void doFilter(Request request, Response response, FilterChain chain) {  
  7.         request.requestStr = request.getRequestStr().replace("敏感""  ")  
  8.                 .replace("貓貓""haha------SesitiveFilter");  
  9.         chain.doFilter(request, response, chain);  
  10.         response.responseStr += "------SesitiveFilter";  
  11.  
  12.     }  
  13.  
  14. }  

FaceFilter類:

  1. package com.lcq.filter;  
  2.  
  3. public class FaceFilter implements Filter {  
  4.  
  5.     @Override 
  6.     public void doFilter(Request request, Response response, FilterChain chain) {  
  7.         request.requestStr = request.getRequestStr().replace(":)",  
  8.                 "^V^-------FaceFilter");  
  9.         chain.doFilter(request, response, chain);  
  10.         response.responseStr += "-------FaceFilter";  
  11.  
  12.     }  
  13.  
  14. }  

***編寫測試類:

  1. package com.lcq.filter;  
  2.  
  3. public class Main {  
  4.     public static void main(String[] args) {  
  5.         String message = "敏感詞匯,重慶,<script> 躲貓貓 :)";  
  6.         Request request = new Request();  
  7.         request.setRequestStr(message);  
  8.         Response response = new Response();  
  9.         response.setResponseStr("response");  
  10.         FilterChain fc = new FilterChain();  
  11.         fc.addFilter(new HTMLFilter()).addFilter(new SesitiveFilter());  
  12.  
  13.         FilterChain fc2 = new FilterChain();  
  14.         fc2.addFilter(new FaceFilter());  
  15.         fc.addFilter(fc2);  
  16.         fc.doFilter(request, response,fc);  
  17.         System.out.println("request = " + request.getRequestStr());  
  18.         System.out.println("response = " + response.getResponseStr());  
  19.     }  
  20.  
  21. }  

在上面的實例中應該注意兩個地方:

1.我們建立的FilterChain中繼承了Filter接口,所以在測試類中就可以像使用其他的過濾器一樣使用FilterChain,大大提高了靈活性;

2.對于實現責任鏈的訪問處理順序問題,該問題的解決使用的是遞歸的思想,從而使先調用的結點在處理返回結果時其調用過濾器的順序是相反的。這種解決方案在Struts和其他框架中實現過濾器和攔截器使用的較為普遍,并且十分巧妙。

 

原文鏈接:http://blog.csdn.net/liuchangqing123/article/details/7386912

【編輯推薦】

  1. Java中的Enum的使用與分析
  2. 按權重選取目標的Java算法
  3. 5種JavaScript調用函數的方法
  4. 談談Java的自動裝箱和拆箱
  5. 淺談Java中的幾種隨機數
責任編輯:林師授 來源: liuchangqing123的博客
相關推薦

2021-12-24 07:50:45

責任鏈模式設計

2010-04-01 09:10:03

PHP設計模式責任鏈模式

2024-01-30 13:15:00

設計模式責任鏈

2022-12-28 08:08:57

2023-09-26 00:27:07

設計模式鏈接

2024-12-03 15:52:45

責任鏈Java

2024-05-09 12:17:00

責任鏈設計模式

2023-06-05 07:55:31

2022-11-01 08:46:20

責任鏈模式對象

2020-11-17 09:32:57

設計模式責任鏈

2021-07-14 10:08:30

責任鏈模式加工鏈

2009-03-16 15:55:21

Java責任鏈模式

2023-09-28 08:45:56

開源責任鏈模式

2021-06-05 17:59:00

責任鏈模式設計

2021-08-14 08:17:49

Android設計模式OKHttp

2024-06-04 13:11:52

Python行為設計模式開發

2021-05-25 09:00:52

責任鏈模式設計模式面試經歷

2018-08-03 08:37:31

設計模式IT項目GDPR

2025-01-03 10:32:26

Spring責任鏈模式

2021-02-11 09:13:27

責任鏈模式業務
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 狠狠色综合欧美激情 | 老头搡老女人毛片视频在线看 | 日韩中文字幕一区二区 | 亚洲伊人久久综合 | 国产一区免费 | 亚洲国产欧美在线 | 国产偷自视频区视频 | 精品一区二区三区在线观看国产 | 国产在线视频一区 | 成人伊人 | 激情 一区 | 亚洲精品9999 | 欧美精品一区二区三区在线四季 | 久久99精品国产99久久6男男 | 午夜影院视频 | 亚洲精品在线视频 | 日韩欧美三级电影 | 亚洲va在线va天堂va狼色在线 | 日韩精品久久久 | 天天操夜夜操 | 日韩成人一区二区 | 2018国产精品 | 成人av网页 | 在线超碰 | 日韩在线播放中文字幕 | 国产精品久久久久久中文字 | 亚洲最新在线 | 中文字幕国产视频 | 天堂在线91 | 另类 综合 日韩 欧美 亚洲 | 色婷婷精品国产一区二区三区 | 国产精品一码二码三码在线 | 国产精品久久久久久久久久免费看 | 国内精品久久久久久 | 国产美女视频黄 | 亚洲成人一级 | 亚洲二区精品 | 久久日韩精品一区二区三区 | 日韩一区二区三区精品 | 国产高清在线精品 | 国产精品久久久久久久久动漫 |