C++设计模式(c设计模式过滤器模式区别)

C++设计模式(c设计模式过滤器模式区别)

浏览次数: 次
信息来源: 用户投稿
更新日期: 2026-09-27
文章简介

过滤器模式(FilterPattern),又叫标准模式(CriteriaPattern),是一种结构型模式,通过结合多个标准来获得单一标准。 这种设计模式允许开发人员使用不同的标准来过滤一组对象,通

2025阿里云双十一服务器活动

过滤器模式(FilterPattern),又叫标准模式(CriteriaPattern),是一种结构型模式,通过结合多个标准来获得单一标准。

这种设计模式允许开发人员使用不同的标准来过滤一组对象,通过逻辑运算以解耦的方式把它们连接起来。

1、体现了各功能模块的“黑盘”特性及高内聚、低耦合的特点。

2、可以将整个系统的输入,输出行为看成是多个过滤器行为的简单合成。

3、支持软件功能模块的重用。

4、便于系统维护:新的过滤器可以添加到现有系统中来,旧的可以由改进的过滤器替换。

5、支持某些特定的分析,如吞吐量计算、死锁检测等。

C++设计模式,c设计模式过滤器模式区别

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;};

标签:
解密Linux系统的系统调用追踪与性能分析(linux跟踪系统调用)
« 上一篇
返回列表
下一篇 »

如本文对您有帮助,就请抽根烟吧!