极简设计模式-过滤器模式
过滤器模式 - Filter Pattern
定义
这种模式允许开发人员使用不同的标准来过滤一组对象,通过逻辑运算以解耦的方式把它们连接起来。
过滤器模式也叫条件模式,过滤器模式是责任链模式的一种衍生模式,属于结构型设计模式。
设计的原则和思想
- 解耦的是请求发送对象(触发业务的对象)和请求处理对象(处理业务的对象)。
- 不变部分是请求处理对象,变化部分是请求处理对象之间的关系。
- 核心思想是通过逻辑运算的方式筛选数据。
一句话概括设计模式
过滤条件的复用和组合。
结构中包含的角色
- 抽象过滤器 BaseFilter
- 具体过滤器 ConcreteFilter
- 请求对象 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);
}
优点
- 多过滤器简单合成。
- 支持并行操作。
- 通过动态选择过滤器组合。
- 简化了对象。使得对象不需要知道链的结构。
- 增加新的请求处理类很方便。
缺点
- 性能下降,实现复杂。
- 不能保证请求一定被接收。
- 系统性能将受到一定影响。
- 代码调试时不太方便,可能会造成循环调用。
何时使用
- 筛选数据的时候。
实际应用场景
- 消息过滤
- 日志过滤。
- mongodb中的Criteria
- 垃圾分类。
- 商城计算用户信用分。根据一大堆条件进行计算。
- 手机卡能否参与某个充值活动。
本作品采用《CC 协议》,转载必须注明作者和本文链接
推荐文章: