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

上一篇 下一篇
《L04 微信小程序从零到发布》
从小程序个人账户申请开始,带你一步步进行开发一个微信小程序,直到提交微信控制台上线发布。
《L01 基础入门》
我们将带你从零开发一个项目并部署到线上,本课程教授 Web 开发中专业、实用的技能,如 Git 工作流、Laravel Mix 前端工作流等。
讨论数量: 0
发起讨论 查看所有版本


暂无话题~