過濾器模式

2021-10-03 13:46:05 字數 2357 閱讀 1247

定義

過濾器模式(intercepting filter pattern),又稱標準模式(criteria pattern),主要用於統一接收並過濾客戶端的請求,根據過濾器的選擇,將請求傳送給對應的目標處理程式。

過濾器模式屬於物件結構型模式。

要點主要角色:

目標物件(target):處理請求,根據要求執行任務。

過濾器(filter):過濾器在請求處理程式執行請求之前或之後,執行某些任務。

過濾器鏈(filter chain):過濾器鏈帶有多個過濾器,並在 target 之前按照定義的順序執行這些過濾器。

過濾管理器(filter manager):過濾管理器管理過濾器和過濾器鏈。

場景某應用web場景下,乙個客戶的web請求需要經過授權檢查和規範檢查,符合全部條件時才會處理該客戶的請求。

實現target

/**

* 目標類

*/public

class

target

}

filter

/**

* 過濾器介面

*/public

inte***ce

filter

authenticationfilter

/**

* 過濾器實現類a

*/public

class

authenticationfilter

implements

filter

}

specificationfilter

/**

* 過濾器實現類b

*/public

class

specificationfilter

implements

filter

}

filterchain

/**

* 過濾器鏈

*/public

class

filterchain

public

void

addfilter

(filter filter)

public

void

settarget

(target target)

public

void

execute

(string request)

// 目標物件處理請求

target.

processingrequest

(request);}

}

filtermanager

/**

* 過濾器管理

*/public

class

filtermanager

public

void

addfilter

(filter filter)

public

void

filterrequest

(string request)

}

client

public

class

client

private

static

void

sendrequest()

}------

----

----

---輸出--

----

----

----

--授權檢查:【@request:這裡是乙個web請求】

規範檢查:【@request:這裡是乙個web請求】

目標物件處理請求:【@request:這裡是乙個web請求】

原始碼click here 總結

過濾器模式將多個互不耦合的標準組成連線成乙個標準。若不使用過濾器模式,我們如果需要根據不同場景將資料根據不同條件去過濾,那麼我們需要在乙個類中編寫一大串的if-else **,而且不同場景的邏輯**耦合在同乙個類中,不利於**維護,以及**復用。

很多框架用到過濾器模式,如tomcat的filter,druid資料統計的filter

過濾器模式

簡介 這種模式允許開發人員使用不同的標準來過濾一組物件,通過邏輯運算以解耦的方式把它們連線起來。這種型別的設計模式屬於結構型模式,它結合多個標準來獲得單一標準。在本例中,以水果作為過濾的物件。水果的顏色和口味各有差別。有時我們只需要酸味的水果,有時只需要黃色的水果,這種情況下,就需要用到過濾器模式,...

過濾器模式

過濾器模式 用於過濾篩選 1.定義常規類 2.定義抽象介面類,用於過濾的函式接收list,並返回list 3.定義具體過濾類實現抽象介面,重寫過濾用的函式 4.定義用於操作的具體過濾類實現抽象介面,add,or,not 5.客戶端使用抽象介面類,進行具體的過濾操作 1.定義常規類 class dog...

過濾器模式

網上對過濾器的解釋已經很多了,而且這個模式的概念理解起來不算很難,但是發現網上提供的demo 寫得不好,所以這裡就給大家介紹一下如何實現合理的過濾器模式。這樣我們應該怎麼做呢?需要解耦,就需要把比較函式提取出來。經過思考,我們可以讓過濾器類持有乙個委託,這個委託就是用來過濾資料的,我們在建構函式中給...