3_5 ResponsibilityChainMode 责任链模式
生活随笔
收集整理的這篇文章主要介紹了
3_5 ResponsibilityChainMode 责任链模式
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
// 定義:使多個對象都有機會處理請求,從而避免請求的發送者
// 和接收者之間的耦合關系
//
// 模式舉例:員工要求加薪,500以內項目經理直接批準,500-1000
// 技術總監批準,1000以上得找總經理批準,都是向項目經理
// 提出加薪,最終是誰批準要看金額
//
// 模式特點:
//
//#include<iostream>
#include<string>
using namespace std;class Manager
{
public:Manager(string name,Manager * manager){m_name = name;m_manager = manager;}virtual void dealRequest(string name,int count)=0;protected:string m_name; //自己名字Manager * m_manager; //頂頭上司
};//項目經理
class ProjectManager : public Manager
{
public:ProjectManager(string name,Manager * manager):Manager(name,manager){}virtual void dealRequest(string name,int count){if(count < 500){cout<<m_name<<" 批準 "<<name<<" 漲薪"<<count<<endl;}else{m_manager->dealRequest(name,count);}}
};//總監
class Majordomo : public Manager
{
public:Majordomo(string name,Manager * manager):Manager(name,manager){}virtual void dealRequest(string name,int count){if(count < 1000){cout<<m_name<<" 批準 "<<name<<" 漲薪"<<count<<endl;}else{m_manager->dealRequest(name,count);}}
};//總經理
class GeneralManager : public Manager
{
public:GeneralManager(string name,Manager * manager):Manager(name,manager){}virtual void dealRequest(string name,int count){if(count >= 1000){cout<<m_name<<" 批準 "<<name<<" 漲薪"<<count<<endl;}else{m_manager->dealRequest(name,count);}}
};int main()
{Manager * generalManager = new GeneralManager("總經理",NULL);Manager * majordomo = new Majordomo("技術總監",generalManager);Manager * projectManager = new ProjectManager("項目經理",majordomo);projectManager->dealRequest("小明",400);projectManager->dealRequest("小麗",800);projectManager->dealRequest("老王",1100);return 0;
}
?
總結
以上是生活随笔為你收集整理的3_5 ResponsibilityChainMode 责任链模式的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 3_10 MediaMode 中介者模式
- 下一篇: 动态语言和静态语言的比较