Java設計模式
Java工廠設計模式
Java抽象工廠模式
Java單例模式
Java建造者(Builder)模式
Java原型模式
Java適配器模式
Java橋接模式
Java過濾器模式(條件模式)
Java組合模式
Java裝飾模式
Java門面模式(或外觀模式)
Java享元模式(Flyweight Pattern)
Java責任鏈模式
Java命令模式
Java迭代器模式
Java中介者模式(Mediator Pattern)
Java解釋器模式
Java備忘錄模式
Java觀察者模式
Java狀態模式
Java空對象模式
Java策略模式
Java模板模式
Java訪問者模式
Java MVC模式
Java業務代理模式
Java組合實體模式
Java數據訪問對象模式
Java前端控制器模式
Java攔截過濾器模式
Java服務定位器模式
Java傳輸對象模式
Java攔截過濾器模式
當我們想要對應用程序的請求或響應進行一些預處理/後處理時,使用截取過濾器設計模式。 在將請求傳遞到實際目標應用程序之前,在請求上定義和應用過濾器。 過濾器可以進行請求的認證/授權/日誌記錄或跟蹤,然後將請求傳遞給相應的處理程序。 以下是這種類型的設計模式的實體。
- 過濾器 - 在請求處理程序執行請求之前或之後執行某些任務的過濾器。
- 過濾器鏈 - 過濾器鏈攜帶多個過濾器,並幫助在目標上以定義的順序執行它們。
- 目標 - 目標對象是請求處理程序。
- 過濾器管理器 - 過濾器管理器管理過濾器和過濾器鏈。
- 客戶端 - 客戶端是向目標(Target)對象發送請求的對象。
實現示例
在這個實現示例中,將創建一個FilterChain
,FilterManager
,Target
,Client
作爲表示實體的各種對象。AuthenticationFilter
和DebugFilter
表示具體的過濾器。
InterceptingFilterDemo
是一個演示類,將使用客戶端來演示攔截過濾器設計模式。
攔截過濾器模式示例的結構如下圖所示 -
第1步
創建一個名爲 Filter
的接口,其代碼如下 -
Filter.java
public interface Filter {
public void execute(String request);
}
第2步
創建具體過濾器,其代碼如下 -
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);
}
}
第3步
創建目標(Target)類,其代碼如下 -
Target.java
public class Target {
public void execute(String request){
System.out.println("Executing request: " + request);
}
}
第4步
創建過濾器鏈,其代碼如下 -
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;
}
}
第5步
創建篩選管理器,其代碼如下 -
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);
}
}
第6步
創建客戶端,其代碼如下 -
Client.java
public class Client {
FilterManager filterManager;
public void setFilterManager(FilterManager filterManager){
this.filterManager = filterManager;
}
public void sendRequest(String request){
filterManager.filterRequest(request);
}
}
第7步
使用客戶端來演示攔截過濾器設計模式。
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");
}
}
第8步
驗證輸出,執行上面的代碼得到以下結果 -
Authenticating request: HOME
request log: HOME
Executing request: HOME