欧美一级特黄大片做受成人-亚洲成人一区二区电影-激情熟女一区二区三区-日韩专区欧美专区国产专区

Java設(shè)計模式中的責(zé)任鏈怎么實(shí)現(xiàn)

本篇內(nèi)容介紹了“Java設(shè)計模式中的責(zé)任鏈怎么實(shí)現(xiàn)”的有關(guān)知識,在實(shí)際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領(lǐng)大家學(xué)習(xí)一下如何處理這些情況吧!希望大家仔細(xì)閱讀,能夠?qū)W有所成!

成都服務(wù)器托管,創(chuàng)新互聯(lián)公司提供包括服務(wù)器租用、成都移動機(jī)房托管、帶寬租用、云主機(jī)、機(jī)柜租用、主機(jī)租用托管、CDN網(wǎng)站加速、域名申請等業(yè)務(wù)的一體化完整服務(wù)。電話咨詢:028-86922220

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

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

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

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

package com.lcq.filter;   public class Request {      String requestStr;       public String getRequestStr() {          return requestStr;      }       public void setRequestStr(String requestStr) {          this.requestStr = requestStr;      }   }
package com.lcq.filter;   public class Response {      String responseStr;       public String getResponseStr() {          return responseStr;      }       public void setResponseStr(String responseStr) {          this.responseStr = responseStr;      }   }

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

package com.lcq.filter;   public interface Filter {      public void doFilter(Request request, Response response,FilterChain chain);   }

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

package com.lcq.filter;   import java.util.ArrayList;  import java.util.List;   public class FilterChain implements Filter {      List<Filter> filters = new ArrayList<Filter>();      int index = 0;       public FilterChain addFilter(Filter f) {          this.filters.add(f);          return this;      }       @Override     public void doFilter(Request request, Response response, FilterChain chain) {          if (index == filters.size())              return;          Filter f = filters.get(index);          index++;          f.doFilter(request, response, chain);      }  }

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

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

HTMLFilter類:

package com.lcq.filter;   /**   * 過濾HTML中的腳本元素   * @author lcq   *   */ public class HTMLFilter implements Filter {       @Override     public void doFilter(Request request, Response response,FilterChain chain) {          request.requestStr = request.getRequestStr().replace("<", "[")                  .replace(">", "] --------HTMLFilter");          chain.doFilter(request, response, chain);          response.responseStr += "--------HTMLFilter";                }   }

SesitiveFilter類:

package com.lcq.filter;   public class SesitiveFilter implements Filter {       @Override     public void doFilter(Request request, Response response, FilterChain chain) {          request.requestStr = request.getRequestStr().replace("敏感", "  ")                  .replace("貓貓", "haha------SesitiveFilter");          chain.doFilter(request, response, chain);          response.responseStr += "------SesitiveFilter";       }   }

FaceFilter類:

package com.lcq.filter;   public class FaceFilter implements Filter {       @Override     public void doFilter(Request request, Response response, FilterChain chain) {          request.requestStr = request.getRequestStr().replace(":)",                  "^V^-------FaceFilter");          chain.doFilter(request, response, chain);          response.responseStr += "-------FaceFilter";       }   }

***編寫測試類:

package com.lcq.filter;   public class Main {      public static void main(String[] args) {          String message = "敏感詞匯,重慶,<script> 躲貓貓 :)";          Request request = new Request();          request.setRequestStr(message);          Response response = new Response();          response.setResponseStr("response");          FilterChain fc = new FilterChain();          fc.addFilter(new HTMLFilter()).addFilter(new SesitiveFilter());           FilterChain fc2 = new FilterChain();          fc2.addFilter(new FaceFilter());          fc.addFilter(fc2);          fc.doFilter(request, response,fc);          System.out.println("request = " + request.getRequestStr());          System.out.println("response = " + response.getResponseStr());      }   }

在上面的實(shí)例中應(yīng)該注意兩個地方:

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

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

“Java設(shè)計模式中的責(zé)任鏈怎么實(shí)現(xiàn)”的內(nèi)容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業(yè)相關(guān)的知識可以關(guān)注創(chuàng)新互聯(lián)網(wǎng)站,小編將為大家輸出更多高質(zhì)量的實(shí)用文章!

本文標(biāo)題:Java設(shè)計模式中的責(zé)任鏈怎么實(shí)現(xiàn)
網(wǎng)站地址:http://www.aaarwkj.com/article18/psdodp.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供動態(tài)網(wǎng)站、全網(wǎng)營銷推廣、網(wǎng)站維護(hù)、品牌網(wǎng)站建設(shè)外貿(mào)建站、網(wǎng)站收錄

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

網(wǎng)站建設(shè)網(wǎng)站維護(hù)公司
日韩亚洲中文一区三级黄片| 亚洲天堂,男人的天堂| 亚洲av少妇一区二区成年男人| av天堂资源在线播放| 国产精品久久中文字幕网| 黄片视频免费在线观看播放| 亚洲一区二区三区不卡视频| 饥渴少妇高潮特殊按摩| 久久人人97超碰人人爱一久久精品| 亚洲成人乱码一区二区| 免费一区二区三区精品| 风韵丰满熟妇啪啪老熟女 | 久久久久久久精品久久| 一区二区蜜桃在线观看| 五月天丁香婷婷狠狠狠| 一级黄片一区二区三区| 亚洲ve中文字幕久久一区二区 | 麻豆久久av免费观看| 欧美精品激情在线不卡| 人妻少妇性色精品专区av| 国产日韩亚洲欧美在线| 国产91白丝在线观看| 操老熟女一区二区三区| 亚洲欧美日韩国产成人精品| 国产传媒视频在线免费观看| 日本中文字幕激情在线| 婷婷中文字幕在线视频| 天堂av一区二区三区| 丰满少妇亚洲中文字幕| 人妻精品中文字幕一区二区在线| 亚洲奇米精品一区二区| 国产黄色免费精品网站| 精品久久久久久久久极品| 成人在线观看一区二区三区| 色婷婷亚洲婷婷亚洲最大| 成年人免费在线观看国产| 九九视频精品免费高清视频| 欧美日本一区二区四区| 久久久久精品国产亚洲av影院| 韩日男人女人性生活视频| 精品国产乱码一区二区三区|