設(shè)計(jì)模式之?dāng)r截過(guò)濾器模式

簡(jiǎn)介

攔截過(guò)濾器模式(Intercepting Filter Pattern)用于對(duì)應(yīng)用程序的請(qǐng)求或響應(yīng)做一些預(yù)處理/后處理。定義過(guò)濾器,并在把請(qǐng)求傳給實(shí)際目標(biāo)應(yīng)用程序之前應(yīng)用在請(qǐng)求上。過(guò)濾器可以做認(rèn)證/授權(quán)/記錄日志,或者跟蹤請(qǐng)求,然后把請(qǐng)求傳給相應(yīng)的處理程序。以下是這種設(shè)計(jì)模式的實(shí)體。

  • 過(guò)濾器(Filter) - 過(guò)濾器在請(qǐng)求處理程序執(zhí)行請(qǐng)求之前或之后,執(zhí)行某些任務(wù)。
  • 過(guò)濾器鏈(Filter Chain) - 過(guò)濾器鏈帶有多個(gè)過(guò)濾器,并在 Target 上按照定義的順序執(zhí)行這些過(guò)濾器。
  • Target - Target 對(duì)象是請(qǐng)求處理程序。
  • 過(guò)濾管理器(Filter Manager) - 過(guò)濾管理器管理過(guò)濾器和過(guò)濾器鏈。
  • 客戶端(Client) - Client 是向 Target 對(duì)象發(fā)送請(qǐng)求的對(duì)象。

實(shí)現(xiàn)

創(chuàng)建 FilterChain、FilterManager、Target、Client 作為表示實(shí)體的各種對(duì)象。AuthenticationFilter 和 DebugFilter 表示實(shí)體過(guò)濾器。演示類InterceptingFilterDemo使用 Client 來(lái)演示攔截過(guò)濾器設(shè)計(jì)模式。


過(guò)濾器模式

代碼實(shí)現(xiàn)

//創(chuàng)建過(guò)濾器接口 Filter。
//Filter.java
public interface Filter {
   public void execute(String request);
}
//創(chuàng)建實(shí)體過(guò)濾器。
//AuthenticationFilter.java
public class AuthenticationFilter implements Filter {
   public void execute(String request){
      System.out.println("Authenticating request: " + request);
   }
}
//DebugFilter.java
public class DebugFilter implements Filter {
   public void execute(String request){
      System.out.println("request log: " + request);
   }
}
//創(chuàng)建 Target。
//Target.java
public class Target {
   public void execute(String request){
      System.out.println("Executing request: " + request);
   }
}
//創(chuàng)建過(guò)濾器鏈。
//FilterChain.java
import java.util.ArrayList;
import java.util.List;
 
public class FilterChain {
   private List<Filter> filters = new ArrayList<Filter>();
   private Target target;
 
   public void addFilter(Filter filter){
      filters.add(filter);
   }
 
   public void execute(String request){
      for (Filter filter : filters) {
         filter.execute(request);
      }
      target.execute(request);
   }
 
   public void setTarget(Target target){
      this.target = target;
   }
}
//創(chuàng)建過(guò)濾管理器。
//FilterManager.java
public class FilterManager {
   FilterChain filterChain;
 
   public FilterManager(Target target){
      filterChain = new FilterChain();
      filterChain.setTarget(target);
   }
   public void setFilter(Filter filter){
      filterChain.addFilter(filter);
   }
 
   public void filterRequest(String request){
      filterChain.execute(request);
   }
}
//創(chuàng)建客戶端 Client。
//Client.java
public class Client {
   FilterManager filterManager;
 
   public void setFilterManager(FilterManager filterManager){
      this.filterManager = filterManager;
   }
 
   public void sendRequest(String request){
      filterManager.filterRequest(request);
   }
}
//使用 Client 來(lái)演示攔截過(guò)濾器設(shè)計(jì)模式。
//InterceptingFilterDemo.java
public class InterceptingFilterDemo {
   public static void main(String[] args) {
      FilterManager filterManager = new FilterManager(new Target());
      filterManager.setFilter(new AuthenticationFilter());
      filterManager.setFilter(new DebugFilter());
 
      Client client = new Client();
      client.setFilterManager(filterManager);
      client.sendRequest("HOME");
   }
}

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 攔截過(guò)濾器模式 攔截過(guò)濾器模式(Intercepting Filter Pattern)用于對(duì)應(yīng)用程序的請(qǐng)求或響應(yīng)...
    Java面試指南閱讀 543評(píng)論 0 0
  • Java攔截過(guò)濾器模式 當(dāng)我們想要對(duì)應(yīng)用程序的請(qǐng)求或響應(yīng)進(jìn)行一些預(yù)處理/后處理時(shí),使用截取過(guò)濾器設(shè)計(jì)模式。 在將請(qǐng)...
    木易林1閱讀 666評(píng)論 0 0
  • Getting Started Burp Suite 是用于攻擊web 應(yīng)用程序的集成平臺(tái)。它包含了許多工具,并為...
    Eva_chenx閱讀 29,241評(píng)論 0 14
  • 攔截過(guò)濾器模式(Intercepting Filter Pattern)用于對(duì)應(yīng)用程序的請(qǐng)求或響應(yīng)做一些預(yù)處理/后...
    _凌浩雨閱讀 767評(píng)論 0 1
  • 前言: 因?yàn)楝F(xiàn)在設(shè)計(jì)模式在網(wǎng)絡(luò)上已經(jīng)泛濫,但是還是有好多程序員不能夠靈活的運(yùn)用設(shè)計(jì)模式,這個(gè)是對(duì)設(shè)計(jì)模式簡(jiǎn)單的介紹...
    蝸牛ICU閱讀 2,340評(píng)論 0 4

友情鏈接更多精彩內(nèi)容