欧美一区2区三区4区公司二百,国产精品婷婷午夜在线观看,自拍偷拍亚洲精品,国产美女诱惑一区二区

C++設計模式:過濾器模式

過濾器模式

過濾器模式(Filter Pattern),又叫標準模式(Criteria Pattern),是一種結構型模式,通過結合多個標準來獲得單一標準。

這種設計模式允許開發(fā)人員使用不同的標準來過濾一組對象,通過邏輯運算以解耦的方式把它們連接起來。

優(yōu)缺點

優(yōu)點:

1、體現(xiàn)了各功能模塊的“黑盤”特性及高內(nèi)聚、低耦合的特點。

2、可以將整個系統(tǒng)的輸入,輸出行為看成是多個過濾器行為的簡單合成。

3、支持軟件功能模塊的重用。

4、便于系統(tǒng)維護:新的過濾器可以添加到現(xiàn)有系統(tǒng)中來,舊的可以由改進的過濾器替換。

5、支持某些特定的分析,如吞吐量計算、死鎖檢測等。

6、支持并行操作,每個過濾器可以作為一個單獨的任務完成。

缺點:

1、通常導致系統(tǒng)處理過程的成批操作。

2、需要設計者協(xié)調(diào)兩個相對獨立但又存在關系的數(shù)據(jù)流。

3、可能需要每個過濾器自己完成數(shù)據(jù)解析和合成工作(如加密和解密),從而導致系統(tǒng)性能下降,并增加了過濾器具體實現(xiàn)的復雜性。
注意事項

1、構建過濾規(guī)則時不要太繁瑣。

2、注意區(qū)分過濾和攔截的功能差異。

代碼實現(xiàn)

person.h
構建類 Person,可輸出自己的屬性,判斷是否在一個數(shù)組中

#include <string>
#include <vector>
#include <iostream>
using namespace std;
?
class Person
{
public:
? ? Person(string name, string gender, int age) : name(name), gender(gender), age(age) {}
?
? ? void printf()
? ? {
? ? ? ? cout << "student name: " + name +
? ? ? ? ? ? ? ? ", gender: " + gender +
? ? ? ? ? ? ? ? ", age: " + std::to_string(age) << endl;
? ? }
?
? ? bool judVec(std::vector<Person*> vec)
? ? {
? ? ? ? auto iter = std::find(std::begin(vec), std::end(vec), this);
? ? ? ? return (iter == std::end(vec));
? ? }
?
? ? string getName() { return this->name; }
?
? ? string getGender() { return this->gender; }
?
? ? int getAge() { return this->age; }
?
private:
? ? string name;
? ? string gender;
? ? int age;
};

interface.h
創(chuàng)建抽象類 - 過濾器;創(chuàng)建實體類 - 過濾器、男性過濾器、女性過濾器、年齡過濾器
男性和年齡過濾器、女性或年齡過濾器

#include "person.h"
#include <algorithm>
?
class Criteria ?//基類-過濾器
{
public:
? ? Criteria() {}
? ? virtual ~Criteria() {}
?
? ? virtual std::vector<Person *> filter(std::vector<Person *> vector) = 0;
};
?
class MaleCriteria: public Criteria //子類-男性過濾器
{
public:
? ? std::vector<Person *> filter(std::vector<Person *> vector)
? ? {
? ? ? ? std::vector<Person *> result;
?
? ? ? ? for(size_t i = 0; i < vector.size(); i++)
? ? ? ? {
? ? ? ? ? ? if(vector.at(i)->getGender() == "male")
? ? ? ? ? ? {
? ? ? ? ? ? ? ? result.push_back(vector.at(i));
? ? ? ? ? ? }
? ? ? ? }
?
? ? ? ? return result;
? ? }
};
?
class FemaleCriteria: public Criteria ? //子類-女性過濾器
{
public:
? ? std::vector<Person *> filter(std::vector<Person *> vector)
? ? {
? ? ? ? std::vector<Person *> result;
?
? ? ? ? for(size_t i = 0; i < vector.size(); i++)
? ? ? ? {
? ? ? ? ? ? if(vector.at(i)->getGender() == "female")
? ? ? ? ? ? {
? ? ? ? ? ? ? ? result.push_back(vector.at(i));
? ? ? ? ? ? }
? ? ? ? }
?
? ? ? ? return result;
? ? }
};
?
class AgeCriteria: public Criteria ?//子類-年齡過濾器
{
public:
? ? std::vector<Person *> filter(std::vector<Person *> vector)
? ? {
? ? ? ? std::vector<Person *> result;
?
? ? ? ? for(size_t i = 0; i < vector.size(); i++)
? ? ? ? {
? ? ? ? ? ? if(vector.at(i)->getAge() > 18) {
? ? ? ? ? ? ? ? result.push_back(vector.at(i));
? ? ? ? ? ? }
? ? ? ? }
?
? ? ? ? return result;
? ? }
};
?
class AndCriteria: public Criteria ?//子類-與 && 過濾器
{
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);
? ? ? ? return secondCriteria->filter(firstvector);
? ? }
?
private:
? ? Criteria *firstCriteria;
? ? Criteria *secondCriteria;
};
?
class OrCriteria: public Criteria ? //子類- 或 || 過濾器
{
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(auto it: firstvector)
? ? ? ? {
? ? ? ? ? ? if (it->judVec(secondvector))
? ? ? ? ? ? {
? ? ? ? ? ? ? ? secondvector.push_back(it);
? ? ? ? ? ? }
? ? ? ? }
?
? ? ? ? return secondvector;
? ? }
?
private:
? ? Criteria *firstCriteria;
? ? Criteria *secondCriteria;
};

  1. ?

文章鏈接: http://www.qzkangyuan.com/21656.html

文章標題:C++設計模式:過濾器模式

文章版權:夢飛科技所發(fā)布的內(nèi)容,部分為原創(chuàng)文章,轉載請注明來源,網(wǎng)絡轉載文章如有侵權請聯(lián)系我們!

聲明:本站所有文章,如無特殊說明或標注,均為本站原創(chuàng)發(fā)布。任何個人或組織,在未征得本站同意時,禁止復制、盜用、采集、發(fā)布本站內(nèi)容到任何網(wǎng)站、書籍等各類媒體平臺。如若本站內(nèi)容侵犯了原著者的合法權益,可聯(lián)系我們進行處理。

給TA打賞
共{{data.count}}人
人已打賞
建站教程

std::remove

2023-6-29 13:02:23

建站教程

C++ 對于大于int限制的運算

2023-6-30 15:23:39

0 條回復 A文章作者 M管理員
    暫無討論,說說你的看法吧
?
個人中心
購物車
優(yōu)惠劵
今日簽到
有新私信 私信列表
搜索
主站蜘蛛池模板: 遂川县| 什邡市| 大兴区| 沙坪坝区| 吉木萨尔县| 时尚| 安远县| 鄢陵县| 枝江市| 永济市| 神农架林区| 沾化县| 武安市| 海盐县| 绿春县| 中方县| 历史| 峡江县| 虹口区| 兴国县| 枣阳市| 镇雄县| 旬邑县| 台中市| 山东省| 应城市| 北碚区| 从化市| 定南县| 阜宁县| 苍山县| 远安县| 土默特左旗| 潼南县| 宁河县| 隆德县| 弋阳县| 闻喜县| 德州市| 册亨县| SHOW|