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;
    }
  • 相关阅读:
    123
    使用Rsync自动实现网站增量备份
    一文了解 Java 各发行版本及新特性
    使用java命令出现Error: A JNI error has occurred, please check your installation and try again的错误
    orElse() 和orElseGet()方法之间的区别
    第一个Hello.java出现错误:找不到或无法加载主类Hello
    位运算统计二进制整数中1的个数
    GIMP使用笔记
    使用V2R做反向代理内网穿透
    Odoo 即时通讯 IM 设计思路
  • 原文地址:https://www.cnblogs.com/wxmwanggood/p/9300960.html
Copyright © 2011-2022 走看看