MOOC清华《面向对象程序设计》第8章:邮件过滤器基本框架(采用责任链模式)
2017-09-21 12:25
399 查看
视频中的代码只是一个总体框架,许多细节的函数并没有实现,我暂时也想不出如何实现,先把视频中的代码手打一遍,贴在这里。
//main.cpp
#include <iostream>
#include "class.h"
using namespace std;
int main(int argc, char** argv) {
DefaultFilter f1(NULL);
BodyFilter f2(&f1);
TitleFilter f3(&f2);
SenderFilter f4(&f3);
Request *request = getRequest();
f4.handler(request);
if(request.isReject()){
cout << "Reject it. " << endl;
}
else{
cout << "Accept it. " << endl;
}
return 0;
}
//main.cpp
#include <iostream>
#include "class.h"
using namespace std;
int main(int argc, char** argv) {
DefaultFilter f1(NULL);
BodyFilter f2(&f1);
TitleFilter f3(&f2);
SenderFilter f4(&f3);
Request *request = getRequest();
f4.handler(request);
if(request.isReject()){
cout << "Reject it. " << endl;
}
else{
cout << "Accept it. " << endl;
}
return 0;
}
//class.h #ifndef class_h #define class_h #include <string> using namespace std; class MailRequest{ bool _reject; public: string getSender(); string getTitle(); string getBody(); string getAll(); void accept(){_reject = false;} void reject(){_reject = true;} bool isReject(){return _reject;} }; class Handler{ Handler *_successor; public: Handler(Handler *successor):_successor(successor){} virtual ~Handler(){} virtual bool doHandle(MailRequest *request) = 0; void handle(MailRequest *request){ if(!doHandle(request)){ if(_successor != NULL) _successor -> handle(request); } } }; class SenderFilter:public Handler{ public: SenderFilter(Handler *successor): Handler(successor){} bool doHandle(MailRequest *request){ if(isWhite(request->getSender())){ request->accept(); return true; } if(isBlack(request->getSender())){ request->reject(); return true; } return false; } }; class TitleFilter:public Handler{ public: TitleFilter(Handler *successor): Handler(successor){} bool doHandle(MailRequest *request){ if(!isValid(request->getTitle())){ request->reject(); return true; } return false; } }; class BodyFilter:public Handler{ string[] invalidTexts = {"XXX","XXXX"}; public: BodyFilter(Handler *successor):Handler(successor){} bool doHandle(MailRequest *request){ for(auto s:InvalidTexts){ if(request->getBody().find(s) != string::npos){ request->reject(); return true; } } return false; } }; class DefaultFilter:public Handler{ public: DefaultFilter(Handler *successor):Handler(successor){} bool doHandle(MailRequest *request){ request->accept(); return true; } }; #endif
相关文章推荐
- MOOC清华《面向对象程序设计》第8章:栈的实现(采用适配器模式)
- MOOC清华《面向对象程序设计》第8章:栈的实现(采用模板实例化)
- MOOC清华《面向对象程序设计》第7章:统计考试及格率v1.0(采用迭代器模式)
- MOOC清华《面向对象程序设计》第8章:栈的实现(基于数组)
- MOOC清华《面向对象程序设计》第8章:智能指针与引用计数实验
- MOOC清华《程序设计基础》第8章:链表的基本操作
- MOOC清华《面向对象程序设计》第7章:统计考试及格率v5.3(采用函数对象)
- MOOC清华《面向对象程序设计》第8章:悬挂指针实验
- MOOC清华《面向对象程序设计》第5章:OOP版填充数字矩阵(采用模板方法)
- MOOC清华《面向对象程序设计》第8章:装饰模式实验
- MOOC清华《面向对象程序设计》第8章:栈的实现(基于STL vector)
- MOOC清华《面向对象程序设计》第8章:用代理模式实现延迟初始化
- MOOC清华《面向对象程序设计》第5章:填充数字矩阵-终极中文版 v 3.0(采用模板方法,并增加集中控制功能)
- MOOC清华《面向对象程序设计》第7章:负载监视器的设计v2.0(采用基于模板的策略模式)
- MOOC清华《面向对象程序设计》第3章:对象组合实验
- MOOC清华《面向对象程序设计》第4章:继承基类构造函数实验
- MOOC清华《面向对象程序设计》第4章:函数模板的特化实验
- MOOC清华《程序设计基础》第8章:二进制文件的数据存取
- MOOC清华《面向对象程序设计》第7章:统计考试及格率v5.2(用文件输入及格线)
- MOOC清华《面向对象程序设计》第2章:类class的综合实验