过滤器模式
过滤器模式(Filter Pattern)或标准模式(Criteria Pattern)是一种设计模式,这种模式允许开发人员使用不同的标准来过滤一组对象,通过逻辑运算以解耦的方式把它们连接起来。这种类型的设计模式属于结构型模式,它结合多个标准来获得单一标准。
日常生活中也有过滤器,这个比较容易理解,就是使用设备过滤出自己想要的,去掉那些不符合条件的。但是在编程里面是怎么实现的呢?
举个例子,有一组用户参与抽奖活动,我们需要筛选一部分符合条件的用户抽奖,其它不符合条件的用户咱直接提示未中奖!比如说需要注册时间大于3个月、消费金额大于100元、没有违规行为、活跃度大约500、性别为女。。。等条件!
有人说问为什么不使用数据库筛选,一条sql数据就搞定了啊,实际上有可能是因为这些数据并不是在一个表里面,有些数据可能需要计算得出。
普通写法:
1 | 循环所有用户... |
这种写法没问题,写业务代码的时候大部分都是这么做,但是如果当你的业务逻辑十分复杂的时候,这样写容易乱,不容易维护。
下面展示使用过滤器模式的写法:
首先,我们需要一个用户类:
1 |
|
Filter接口:
1 |
|
AgeFiler:
1 |
|
MaleFilter:
1 |
|
最后使用:
1 |
|
这个例子比较简单,也不算太恰当,实际应用中,过滤器模式很多地方都用,比如PHP自带的就有一个Filter类,有一些类似 filter_input 这样的方法可以用来过滤变量。在laravel框架里面利用管道过滤器模式实现了middleware(中间件),非常方便,在实现功能的同时增加了项目的可维护性。