C++设计模式--职责链模式
来源:互联网 发布:查找英文文献的数据库 编辑:程序博客网 时间:2024/06/06 09:29
// ChainofResponsibilityPattern.cpp : 定义控制台应用程序的入口点。
RES:http://blog.csdn.net/wuzhekai1985/article/details/6673892
//通过此例程了解“职责链模式”
// 职责链模式:使多个对象都有机会处理请求,从而避免请求的发送者和接收者之间的耦合关系。将这些对象连成一条链,并沿着这条链传递该请求,直到有一个对象处理它为止。其思想很简单,考虑员工要求加薪。公司的管理者一共有三级,总经理、总监、经理,如果一个员工要求加薪,应该向主管的经理申请,如果加薪的数量在经理的职权内,那么经理可以直接批准,否则将申请上交给总监。总监的处理方式也一样,总经理可以处理所有请求。这就是典型的职责链模式,请求的处理形成了一条链,直到有一个对象处理请求
RES:http://blog.csdn.net/wuzhekai1985/article/details/6673892
#include "stdafx.h"#include <string>#include <process.h>#include <iostream>using namespace std;//经理接口类class CManager{public:CManager(CManager *pManager,string name){this->m_pManager=pManager;this->m_name=name;}virtual ~CManager(){}public:virtual void DealWithRequest(string name,int num){}protected:CManager *m_pManager;string m_name;};//经理class CCommonManager:public CManager{public:CCommonManager(CManager *pManager,string name):CManager(pManager,name){}~CCommonManager(){}public:void DealWithRequest(string name,int num){if(num < 500) //经理职权之内 { cout<<"经理"<<m_name<<"批准"<<name<<"加薪"<<num<<"元"<<endl<<endl; } else { cout<<"经理"<<m_name<<"无法处理,交由总监处理"<<endl; m_pManager->DealWithRequest(name, num); } }};//总监 class Majordomo: public CManager { public: Majordomo(CManager *manager, string name):CManager(manager,name) {} void DealWithRequest(string name, int num) { if(num < 1000) //总监职权之内 { cout<<"总监"<<m_name<<"批准"<<name<<"加薪"<<num<<"元"<<endl<<endl; } else { cout<<"总监"<<m_name<<"无法处理,交由总经理处理"<<endl; m_pManager->DealWithRequest(name, num); } } }; //总经理 class GeneralManager: public CManager { public: GeneralManager(CManager *manager, string name):CManager(manager,name) {} void DealWithRequest(string name, int num) //总经理可以处理所有请求 { cout<<"总经理"<<m_name<<"批准"<<name<<"加薪"<<num<<"元"<<endl<<endl; } }; int _tmain(int argc, _TCHAR* argv[]){CManager *general = new GeneralManager(NULL, "A"); //设置上级,总经理没有上级 CManager *majordomo = new Majordomo(general, "B"); //设置上级 CManager *common = new CCommonManager(majordomo, "C"); //设置上级 cout<<"---------------员工D要求加薪300员,处理中-------------"<<endl<<endl;common->DealWithRequest("D",300); //员工D要求加薪 cout<<"------------员工E要求加薪600员,处理中----------------"<<endl<<endl;common->DealWithRequest("E", 600); cout<<"--------------员工F要求加薪1000员,处理中---------------"<<endl<<endl;common->DealWithRequest("F", 1000); delete common;delete majordomo; delete general; system("pause");return 0;}
- 职责链设计模式
- 【设计模式】职责链
- 设计模式---职责链
- 职责链设计模式
- 职责链设计模式
- 设计模式---职责链模式
- 设计模式-职责链模式
- 设计模式 职责链模式
- 设计模式- 职责链模式
- 设计模式 - 职责链模式
- 设计模式 - 职责链模式
- 设计模式-职责链模式
- 设计模式--职责链模式
- 设计模式-职责链模式
- 设计模式--职责链模式
- 设计模式-职责链模式
- 【设计模式】职责链模式
- 设计模式-职责链模式
- Java程序员应该知道的10个调试技巧
- ArcGIS for javascript官网环境搭建
- [Qt] Qt对话框 [2013-09-17更新]
- MoveWindow和SetWindowPos之异同!
- @Override:加载项目的时候,带@Override的出错原因
- C++设计模式--职责链模式
- OnDraw和OnPaint函数的区别
- Windows下svn客户端和服务器的安装使用
- IOS atomic与nonatomic,assign,copy与retain的定义和区别
- SQL Server触发器创建、删除、修改、查看
- Android UI 之一步步教你自定义控件(自定义属性、合理设计onMeasure、合理设计onDraw等)
- C++中的抽象类以及接口的区别联系
- maven 配置
- The top 5 JavaScript templating engines