过滤器模式 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 管理、购物车、订单管理、支付宝支付、微信支付、订单退款流程、优惠券等
《G01 Go 实战入门》
从零开始带你一步步开发一个 Go 博客项目,让你在最短的时间内学会使用 Go 进行编码。项目结构很大程度上参考了 Laravel。
讨论数量: 0
发起讨论 只看当前版本


暂无话题~