最近2018中文字幕在日韩欧美国产成人片_国产日韩精品一区二区在线_在线观看成年美女黄网色视频_国产精品一区三区五区_国产精彩刺激乱对白_看黄色黄大色黄片免费_人人超碰自拍cao_国产高清av在线_亚洲精品电影av_日韩美女尤物视频网站

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時(shí)間:8:30-17:00
你可能遇到了下面的問題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
Java設(shè)計(jì)模式:責(zé)任鏈

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

我們是自2013年創(chuàng)立以來的成都網(wǎng)站建設(shè)公司,提供網(wǎng)站建設(shè),電商網(wǎng)站設(shè)計(jì)開發(fā),外貿(mào)網(wǎng)站制作,響應(yīng)式網(wǎng)頁設(shè)計(jì),重慶小程序開發(fā)、等服務(wù)。為客戶創(chuàng)造有價(jià)值的品牌營銷體驗(yàn),讓互聯(lián)網(wǎng)提升企業(yè)的競爭力!

在處理用戶的請求時(shí)可能要根據(jù)不同的情況對請求添加不同的處理邏輯,在這時(shí)候就可以利用責(zé)任鏈進(jìn)行設(shè)計(jì)。當(dāng)需要添加一個(gè)處理邏輯時(shí)可以很方便的添加一個(gè)處理的節(jié)點(diǎn)。

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

首先建立用戶的請求和接收對象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. }  

我們將處理用戶信息的邏輯抽象成為一個(gè)個(gè)的過濾器,進(jìn)一步抽象出過濾器接口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方法參數(shù)中有FilterChain的一個(gè)變量,我們再建立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 filters = new ArrayList();  
  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接口,從而實(shí)現(xiàn)了doFilter方法,在FilterChain中又有一個(gè)index變量,該變量是用來標(biāo)記當(dāng)前訪問的是哪一個(gè)過濾器,這些過濾器是存放在ArrayList中的,這樣用戶在使用的時(shí)候就可以實(shí)現(xiàn)自己的過濾器,編寫自己的處理邏輯,從而將自己的過濾器添加到ArrayList中,再調(diào)用FilterChain的doFilter方法遍歷整個(gè)責(zé)任鏈。

下面我們編寫三個(gè)過濾器:

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 = "敏感詞匯,重慶,