此为设计模式第十谈!
用总-分-总的结构和生活化的例子给你讲解设计模式!
码农不易,各位学者学到东西请点赞收藏支持支持!
开始部分:
总:责任链的本质是使多个对象都有机会处理请求,将这些对象连成一条链,并沿着这条链传递该请求,直到有一个对象处理它为止。
分:
1.老规矩,打开VS创建一个控制台程序
2.实现编码,这里用学生在学校请假的例子来辅助理解
2.1 抽象处理者,设置下一个节点和获取下一个节点
2.2 具体处理者,实现处理逻辑
2.3 用链表结构来组装责任链
#include <iostream>
using namespace std;// 抽象处理者:领导者类
class Leader {
public:void SetNext(Leader* next) {this->mnext = next;}Leader* GetNext()const {return mnext;}virtual ~Leader() {}// 处理请求方法virtual void HandlerRequest(int days) = 0;private:Leader* mnext;
};// 具体处理者1:班主任
class headmaster :public Leader {
public:void HandlerRequest(int days)override {if (days <= 3){cout << "\n班主任已经批准你请假:" << days << "天。" << endl;}else{if (GetNext() != nullptr){GetNext()->HandlerRequest(days);}else{cout << "\n你请假的天数太多,没有人能够批准你请假。" << endl;}}}
};// 具体处理者2:系主任
class departmentHead :public Leader {
public:void HandlerRequest(int days)override {if (days <= 10){cout << "\n系主任已经批准你请假:" << days << "天。" << endl;}else{if (GetNext() != nullptr){GetNext()->HandlerRequest(days);}else{cout << "\n你请假的天数太多,没有人能够批准你请假。" << endl;}}}
};// 具体处理者3:校长
class principal :public Leader {
public:void HandlerRequest(int days)override {if (days <= 30){cout << "\n校长已经批准你请假:" << days << "天。" << endl;}else{if (GetNext() != nullptr){GetNext()->HandlerRequest(days);}else{cout << "\n你请假的天数太多,没有人能够批准你请假。" << endl;}}}
};int main()
{// 组装责任链Leader* t1 = new headmaster();Leader* t2 = new departmentHead();Leader* t3 = new principal();t1->SetNext(t2);t2->SetNext(t3);// 提交请假请求天数dayint day = 0;cout << "\n\n请输入请假天数:";while (cin >> day){t1->HandlerRequest(day);}delete t1;t1 = nullptr;delete t2;t2 = nullptr;delete t3;t3 = nullptr; return 0;
}