过滤器模式(FilterPattern),又叫标准模式(CriteriaPattern),是一种结构型模式,通过结合多个标准来获得单一标准。
这种设计模式允许开发人员使用不同的标准来过滤一组对象,通过逻辑运算以解耦的方式把它们连接起来。
1、体现了各功能模块的“黑盘”特性及高内聚、低耦合的特点。
2、可以将整个系统的输入,输出行为看成是多个过滤器行为的简单合成。
3、支持软件功能模块的重用。
4、便于系统维护:新的过滤器可以添加到现有系统中来,旧的可以由改进的过滤器替换。
5、支持某些特定的分析,如吞吐量计算、死锁检测等。

1、通常导致系统处理过程的成批操作。
2、需要设计者协调两个相对独立但又存在关系的数据流。
3、可能需要每个过滤器自己完成数据解析和合成工作(如加密和解密),从而导致系统性能下降,并增加了过滤器具体实现的复杂性。注意事项
1、构建过滤规则时不要太繁琐。
2、注意区分过滤和拦截的功能差异。
person.h构建类Person,可输出自己的属性,判断是否在一个数组中
include<vector>#include<iostream>usingnamespacestd;?classPerson{public:??Person(stringname,stringgender,intage):name(name),gender(gender),age(age){}???voidprintf()??{cout<<"studentname:"+name+",gender:"+gender+",age:"+std::to_string(age)<<endl;??}???booljudVec(std::vector<Person*>vec)??{autoiter=std::find(std::begin(vec),std::end(vec),this);return(iter==std::end(vec));??}???stringgetName(){returnthis->name;}???stringgetGender(){returnthis->gender;}???intgetAge(){returnthis->age;}?private:??stringname;??stringgender;??intage;};
interface.h创建抽象类-过滤器;创建实体类-过滤器、男性过滤器、女性过滤器、年龄过滤器男性和年龄过滤器、女性或年龄过滤器
include<algorithm>?classCriteria?//基类-过滤器{public:??Criteria(){}??virtual~Criteria(){}???virtualstd::vector<Person*>filter(std::vector<Person*>vector)=0;};?classMaleCriteria:publicCriteria//子类-男性过滤器{public:??std::vector<Person*>filter(std::vector<Person*>vector)??{std::vector<Person*>result;?for(size_ti=0;i<vector.size();i++){??if(vector.at(i)->getGender()=="male")??{result.push_back(vector.at(i));??}}?returnresult;??}};?classFemaleCriteria:publicCriteria?//子类-女性过滤器{public:??std::vector<Person*>filter(std::vector<Person*>vector)??{std::vector<Person*>result;?for(size_ti=0;i<vector.size();i++){??if(vector.at(i)->getGender()=="female")??{result.push_back(vector.at(i));??}}?returnresult;??}};?classAgeCriteria:publicCriteria?//子类-年龄过滤器{public:??std::vector<Person*>filter(std::vector<Person*>vector)??{std::vector<Person*>result;?for(size_ti=0;i<vector.size();i++){??if(vector.at(i)->getAge()>18){result.push_back(vector.at(i));??}}?returnresult;??}};?classAndCriteria:publicCriteria?//子类-与&&过滤器{public:??AndCriteria(Criteria*firstCriteria,Criteria*secondCriteria):firstCriteria(firstCriteria),secondCriteria(secondCriteria){}???std::vector<Person*>filter(std::vector<Person*>vector)??{std::vector<Person*>firstvector=firstCriteria->filter(vector);returnsecondCriteria->filter(firstvector);??}?private:??Criteria*firstCriteria;??Criteria*secondCriteria;};?classOrCriteria:publicCriteria?//子类-或||过滤器{public:??OrCriteria(Criteria*firstCriteria,Criteria*secondCriteria):firstCriteria(firstCriteria),secondCriteria(secondCriteria){}???std::vector<Person*>filter(std::vector<Person*>vector)??{std::vector<Person*>firstvector=firstCriteria->filter(vector);std::vector<Person*>secondvector=secondCriteria->filter(vector);?for(autoit:firstvector){??if(it->judVec(secondvector))??{secondvector.push_back(it);??}}?returnsecondvector;??}?private:??Criteria*firstCriteria;??Criteria*secondCriteria;};
本文来源:国外服务器--C++设计模式(c设计模式过滤器模式区别)
本文地址:https://www.idcbaba.com/guowai/6440.html
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 1919100645@qq.com 举报,一经查实,本站将立刻删除。




