过滤器模式 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 网站上。

上一篇 下一篇
《L03 构架 API 服务器》
你将学到如 RESTFul 设计风格、PostMan 的使用、OAuth 流程,JWT 概念及使用 和 API 开发相关的进阶知识。
《L02 从零构建论坛系统》
以构建论坛项目 LaraBBS 为线索,展开对 Laravel 框架的全面学习。应用程序架构思路贴近 Laravel 框架的设计哲学。
讨论数量: 0
发起讨论 只看当前版本


暂无话题~