• 设计模式 C++实现职责链模式 (顺便复习C++)


    #include <iostream>
    #include <list>
    #include<algorithm>
    #include<sstream>
    using namespace std;
    class PurchaseRequest 
    {
    private:
        string purchaseName;
        int purchaseNum;
    public:
        PurchaseRequest(string purchaseName, int purchaseNum) 
        {
            this->purchaseName = purchaseName;
            this->purchaseNum = purchaseNum;
        }
        int getPurchaseNum() 
        {
            return purchaseNum;
        }
        void setPurchaseName(string purchaseName)
        {
            this->purchaseName = purchaseName;
        }
        string getPurchaseName() {
            return purchaseName;
        }
        void setPurchaseNum(int purchaseNum) {
            this->purchaseNum = purchaseNum;
        }
    };
    class Leader 
    {
    //C++中类中自身类的对象不能做自己的数据成员,但是做静态数据成员、引用类数据成员等可以
    //不能使用抽象数据成员
    protected:
        string name;
        Leader *successor;//使用指针,类的定义要知道类的空间分配大小
    public:
        Leader(string name)
        {
            this->name = name;
        }
        Leader(Leader* leader, string name) :successor(leader), name(name) {}//:冒号,参数初始化
        virtual void handleRequest(PurchaseRequest request) = 0;
    };
    class Director: public Leader
    {
    public:
        Director(Leader* leader, string name): Leader(leader,name){}//子类调用父类的构造函数
        void handleRequest(PurchaseRequest requset) 
        {
            int num = requset.getPurchaseNum();
            string num_str;
            stringstream sStream;
            sStream << num;
            sStream >> num_str;
            if (requset.getPurchaseNum() <= 10000) {
                cout << "主任" + name + "审批" + requset.getPurchaseName() + "" + num_str+ "元采购单" << endl;
            }
            else {
                successor->handleRequest(requset);//交由上级处理
            }
        }
    };
    class Manager :public Leader
    {
    public:
        Manager(Leader* leader, string name) : Leader(leader, name) {}//子类调用父类的构造函数
        void handleRequest(PurchaseRequest requset)
        {
            int num = requset.getPurchaseNum();
            //int类型转为string类型
            string num_str;
            stringstream sStream;
            sStream << num;
            sStream >> num_str;
            if (requset.getPurchaseNum() <= 50000) {
                cout << "部门经理" + name + "审批" + requset.getPurchaseName() + "" + num_str + "元采购单" << endl;
            }
            else {
                successor->handleRequest(requset);//交由上级处理
            }
        }
    };
    class smallGeneralManager :public Leader
    {
    public:
        smallGeneralManager(Leader* leader, string name) : Leader(leader, name) {}//子类调用父类的构造函数
        void handleRequest(PurchaseRequest requset)
        {
            int num = requset.getPurchaseNum();
            string num_str;
            stringstream sStream;
            sStream << num;
            sStream >> num_str;
            if (requset.getPurchaseNum() <= 100000) {
                cout << "副总经理" + name + "审批" + requset.getPurchaseName() + "" + num_str + "元采购单" << endl;
            }
            else {
                successor->handleRequest(requset);//交由上级处理
            }
        }
    };
    class GeneralManager :public Leader
    {
    public:
        GeneralManager(Leader* leader, string name) : Leader(leader, name) {}//子类调用父类的构造函数
        void handleRequest(PurchaseRequest requset)
        {
            int num = requset.getPurchaseNum();
            string num_str;
            stringstream sStream;
            sStream << num;
            sStream >> num_str;
            if (requset.getPurchaseNum() <= 200000) {
                cout << "总经理" + name + "审批" + requset.getPurchaseName() + "" + num_str + "元采购单" << endl;
            }
            else {
                successor->handleRequest(requset);//交由上级处理
            }
        }
    };
    class Workers :public Leader
    {
    public:
        Workers(Leader* leader, string name) : Leader(leader, name) {}//子类调用父类的构造函数
        void handleRequest(PurchaseRequest requset)
        {
            int num = requset.getPurchaseNum();
            string num_str;
            stringstream sStream;
            sStream << num;
            sStream >> num_str;
            if (requset.getPurchaseNum() > 200000) {
                cout << "经职工大会" + name + "审批" + requset.getPurchaseName() + "" + num_str + "元采购单" << endl;
            }
            else {
                successor->handleRequest(requset);//交由上级处理
            }
        }
    };
    int main()
    {
        Leader* workers = new Workers(NULL, "第一次会议");
        Leader* generalManger = new GeneralManager(workers, "张三");
        Leader* objectsmallGeneralManager = new smallGeneralManager(generalManger, "李波");
        Leader* objectManager = new  Manager(objectsmallGeneralManager, "赵强");
        Leader* objectDirector = new Director(objectManager, "王明");
        PurchaseRequest purchaseRequest1("小红", 5000);
        PurchaseRequest purchaseRequest2("小绿", 40000);
        PurchaseRequest purchaseRequest3("小黄", 80000);
        PurchaseRequest purchaseRequest4("小蓝", 150000);
        PurchaseRequest purchaseRequest5("小紫", 250000);
        objectDirector->handleRequest(purchaseRequest1);
        objectDirector->handleRequest(purchaseRequest2);
        objectDirector->handleRequest(purchaseRequest3);
        objectDirector->handleRequest(purchaseRequest4);
        objectDirector->handleRequest(purchaseRequest5);
    }
  • 相关阅读:
    nginx主配置文件详解
    微信网页第三方登录原理
    QQ第三方登陆流程详解
    php垃圾回收机制
    mysql索引
    MySQL性能优化的最佳20+条经验
    MYSQL explain详解
    mysql分区功能详细介绍,以及实例
    MySQL分表、分区
    Redis主从读写分离配置
  • 原文地址:https://www.cnblogs.com/fengchuiguobanxia/p/15559612.html
Copyright © 2020-2023  润新知