定義
這種模式允許開發人員使用不同的標準來過濾一組物件,透過邏輯運算以解耦的方式把它們連線起來。
過濾器模式也叫條件模式,過濾器模式是責任鏈模式的一種衍生模式,屬於結構型設計模式。
設計的原則和思想
- 解耦的是請求傳送物件(觸發業務的物件)和請求處理物件(處理業務的物件)。
- 不變部分是請求處理物件,變化部分是請求處理物件之間的關係。
- 核心思想是透過邏輯運算的方式篩選資料。
一句話概括設計模式
過濾條件的複用和組合。
結構中包含的角色
- 抽象過濾器 BaseFilter
- 具體過濾器 ConcreteFilter
- 請求物件 Request
最小可表達程式碼
interface BaseFilter
{
public function filter(Request $request);
}
class ConcreteFilter implements BaseFilter
{
public function filter(Request $request)
{
echo '過濾資訊';
}
}
class Request{}
$request = new Request();
foreach ([
new ConcreteFilter,
new ConcreteFilter,
] as $filter) {
$filter->filter($request);
}
優點
- 多過濾器簡單合成。
- 支援並行操作。
- 透過動態選擇過濾器組合。
- 簡化了物件。使得物件不需要知道鏈的結構。
- 增加新的請求處理類很方便。
缺點
- 效能下降,實現複雜。
- 不能保證請求一定被接收。
- 系統效能將受到一定影響。
- 程式碼除錯時不太方便,可能會造成迴圈呼叫。
何時使用
- 篩選資料的時候。
實際應用場景
- 訊息過濾
- 日誌過濾。
- mongodb中的Criteria
- 垃圾分類。
- 商城計算使用者信用分。根據一大堆條件進行計算。
- 手機卡能否參與某個充值活動。
本作品採用《CC 協議》,轉載必須註明作者和本文連結