C++设计模式--职责链模式

本文介绍了一种设计模式——职责链模式,通过一个员工加薪请求的例子详细解释了该模式的工作原理。请求会在不同级别的管理者之间传递,直到被适当的人处理。文章通过C++代码实现了这一过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 // ChainofResponsibilityPattern.cpp : 定义控制台应用程序的入口点。

//通过此例程了解“职责链模式”


// 职责链模式:使多个对象都有机会处理请求,从而避免请求的发送者和接收者之间的耦合关系。将这些对象连成一条链,并沿着这条链传递该请求,直到有一个对象处理它为止。其思想很简单,考虑员工要求加薪。公司的管理者一共有三级,总经理、总监、经理,如果一个员工要求加薪,应该向主管的经理申请,如果加薪的数量在经理的职权内,那么经理可以直接批准,否则将申请上交给总监。总监的处理方式也一样,总经理可以处理所有请求。这就是典型的职责链模式,请求的处理形成了一条链,直到有一个对象处理请求



RES: http://blog.youkuaiyun.com/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;
}




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值