## 定义
        这种模式允许开发人员使用不同的标准来过滤一组对象，通过逻辑运算以解耦的方式把它们连接起来。
        过滤器模式也叫条件模式，过滤器模式是责任链模式的一种衍生模式,属于结构型设计模式。

## 设计的原则和思想
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. 手机卡能否参与某个充值活动。