过滤器模式 Filter Pattern

未匹配的标注

定义#

    这种模式允许开发人员使用不同的标准来过滤一组对象,通过逻辑运算以解耦的方式把它们连接起来。
    过滤器模式也叫条件模式,过滤器模式是责任链模式的一种衍生模式,属于结构型设计模式。

设计的原则和思想#

  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. 增加新的请求处理类很方便。

    缺点#

  6. 性能下降,实现复杂。
  7. 不能保证请求一定被接收。
  8. 系统性能将受到一定影响。
  9. 代码调试时不太方便,可能会造成循环调用。

何时使用#

  1. 筛选数据的时候。

实际应用场景#

  1. 消息过滤
  2. 日志过滤。
  3. mongodb 中的 Criteria
  4. 垃圾分类。
  5. 商城计算用户信用分。根据一大堆条件进行计算。
  6. 手机卡能否参与某个充值活动。

本文章首发在 LearnKu.com 网站上。

上一篇 下一篇
《L05 电商实战》
从零开发一个电商项目,功能包括电商后台、商品 & SKU 管理、购物车、订单管理、支付宝支付、微信支付、订单退款流程、优惠券等
《L03 构架 API 服务器》
你将学到如 RESTFul 设计风格、PostMan 的使用、OAuth 流程,JWT 概念及使用 和 API 开发相关的进阶知识。
讨论数量: 0
发起讨论 只看当前版本


暂无话题~