極簡設計模式-過濾器模式

long2ge 發表於 2021-12-15
設計模式

定義

    這種模式允許開發人員使用不同的標準來過濾一組物件,通過邏輯運算以解耦的方式把它們連線起來。
    過濾器模式也叫條件模式,過濾器模式是責任鏈模式的一種衍生模式,屬於結構型設計模式。

設計的原則和思想

  1. 解耦的是請求傳送物件(觸發業務的物件)和請求處理物件(處理業務的物件)。
  2. 不變部分是請求處理物件,變化部分是請求處理物件之間的關係。
  3. 核心思想是通過邏輯運算的方式篩選資料。

一句話概括設計模式

過濾條件的複用和組合。

結構中包含的角色

  1. 抽象過濾器 BaseFilter
  2. 具體過濾器 ConcreteFilter
  3. 請求物件 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);
}

優點

  1. 多過濾器簡單合成。
  2. 支援並行操作。
  3. 通過動態選擇過濾器組合。
  4. 簡化了物件。使得物件不需要知道鏈的結構。
  5. 增加新的請求處理類很方便。

缺點

  1. 效能下降,實現複雜。
  2. 不能保證請求一定被接收。
  3. 系統效能將受到一定影響。
  4. 程式碼除錯時不太方便,可能會造成迴圈呼叫。

何時使用

  1. 篩選資料的時候。

實際應用場景

  1. 訊息過濾
  2. 日誌過濾。
  3. mongodb中的Criteria
  4. 垃圾分類。
  5. 商城計算使用者信用分。根據一大堆條件進行計算。
  6. 手機卡能否參與某個充值活動。
本作品採用《CC 協議》,轉載必須註明作者和本文連結
Long2Ge