设计模式——职责链模式
来源:互联网 发布:卢洁云淘宝店衣服好吗 编辑:程序博客网 时间:2024/04/29 19:17
c++ 职责链模式(Chain of Responsibility)
OSG使用职责链的设计模式,以加载尽量少的插件。
职 责链模式:使多个对象都有机会处理请求,从而避免请求的发送者和接收者之间的耦合关系。将这些对象连成一条链,并沿着这条链传递该请求,直到有一个对象处 理它为止。其思想很简单,考虑员工要求加薪。公司的管理者一共有三级,总经理、总监、经理,如果一个员工要求加薪,应该向主管的经理申请,如果加薪的数量 在经理的职权内,那么经理可以直接批准,否则将申请上交给总监。总监的处理方式也一样,总经理可以处理所有请求。这就是典型的职责链模式,请求的处理形成 了一条链,直到有一个对象处理请求。给出这个例子的UML图。
#include <iostream>#include <string>using namespace std;class Manager{protected: Manager *m_manager; string m_name;public: Manager(Manager* manager,string name):m_manager(manager),m_name(name){} virtual void DealWithRequest(string name, int num) {}};//经理class CommonManager : public Manager{public: CommonManager(Manager* manager,string name):Manager(manager,name){} void DealWithRequest(string name,int num) { if(num < 500) { cout << "经理" <<m_name << "批准" << name << "加薪" << num << "元" <<endl; } else { cout << "经理" << m_name << "无法处理,交由总监处理" <<endl; m_manager->DealWithRequest(name,num); } }};class Majordomo:public Manager{public: Majordomo(Manager *manager,string name):Manager(manager,name){} virtual void DealWithRequest(string name,int num) { if(num < 1000) { cout << "总监" <<m_name << "批准" << name << "加薪" << num << "元" <<endl; } else { cout << "总监" << m_name << "无法处理,交由总经理处理" <<endl; m_manager->DealWithRequest(name,num); } }};class GeneralManager : public Manager{public: GeneralManager(Manager *manager,string name):Manager(manager,name){} void DealWithRequest(string name,int num) { cout << "总经理" <<m_name << "批准" << name << "加薪" << num << "元" <<endl; }};
客户端使用:
#include <iostream>#include "state.h"using namespace std;int main(){ Manager *general = new GeneralManager(NULL,"a"); Manager *majordomo = new Majordomo(general,"b"); Manager *common = new CommonManager(majordomo,"c"); common->DealWithRequest("d",400); common->DealWithRequest("d",700); common->DealWithRequest("d",1200); system("pause"); return 0;}
说明:
1. 职责链的特点是:当客户提交一个请求时,请求是沿链传递直至有一个Manager对象负责处理它。
2. 职责链的好处是:请求者不用管哪个对象来处理,反正该请求会被处理。它只需保持一个后继者即可。
3. 要注意的是:一个请求到链的最后可能也没有处理,所以一定要配置得当。
0 0
- 《设计模式》——职责链模式
- 设计模式——职责链模式
- 设计模式——职责链模式
- 设计模式——职责链模式
- 设计模式——职责链模式
- 设计模式——职责链
- 设计模式——职责链
- 设计模式—职责连模式
- 设计模式—职责连模式
- 职责链设计模式
- 【设计模式】职责链
- 设计模式---职责链
- 职责链设计模式
- 职责链设计模式
- 每日设计模式——职责链模式
- C#设计模式之14——职责链模式
- java设计模式——职责链模式
- OOP设计模式[JAVA]——03职责链模式
- c++作业2
- Bootstrap的日期选择插件DateTime Picker增强版
- 股票输入软键盘,android初探自定义软键盘
- 安卓开发——androidstudio自动导包(导入全部包)
- Myeclipse集成jad反编译软件
- 设计模式——职责链模式
- 关注CSDN开发高手的blog主页链接
- Auto Layout界面自动布局系列2-使用Xcode的Interface Builder添加布局约束
- Apache + Tomcat + jk配置负载均衡以及虚拟主机 实现多域名、多用户同时使用
- MATLAB中快速删除矩阵中满足条件的行列
- 弹出提醒对话框
- C# 面向对象,字符串中取数组
- 单链表的实现
- BUG Conclusion