zoukankan      html  css  js  c++  java
  • C++设计模式之职责链模式

    代码实现:

    // chainResbonsibility.cpp : 定义控制台应用程序的入口点。
    //
    
    #include "stdafx.h"
    #include <string>
    #include <iostream>
    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;
        }
    };
    int _tmain(int argc, _TCHAR* argv[])
    {
        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;
    }
  • 相关阅读:
    高二下期末考试
    LG月赛.7
    CF1187E
    P5440 【XR-2】奇迹
    P1084 疫情控制
    P1083 借教室
    P2680 运输计划
    P3128 [USACO15DEC]最大流Max Flow
    博弈入门
    HDU 1907
  • 原文地址:https://www.cnblogs.com/wxmwanggood/p/9300960.html
Copyright © 2011-2022 走看看