1. 程式人生 > 其它 >c++實現職責鏈模式--財務審批

c++實現職責鏈模式--財務審批

內容:

某物資管理系統中物資採購需要分級審批,主任可以審批1萬元及以下的採購單,部門經理可以審批5萬元及以下的採購單,副總經理可以審批10萬元及以下的採購單,總經理可以審批20萬元及以下的採購單,20萬元以上的採購單需要開職工大會確定。現用職責鏈模式設計該系統。

程式碼:

#include<iostream>
using namespace std;
class PurchaseRequest {
private:
    int money;
public:
    PurchaseRequest(int money) {
        this->money=money;
    }
    
void setMoney(int money) { this->money=money; } int getMoney(){ return this->money; } }; class Leader { protected: string name; Leader *successor; public: Leader(string name) { this->name=name; } void setSuccessor(Leader *successor) {
this->successor=successor; } virtual void handleRequest(PurchaseRequest *request)=0; }; class Director:public Leader{ private: string name; public: Director(string name):Leader(name){} void handleRequest(PurchaseRequest *request) { // TODO Auto-generated method stub if
(request->getMoney()<=1) { cout<<"主任"<<this->name<<"審批"<<request->getMoney()<<"萬元的採購單"<<endl; } else { if(this->successor!=NULL) { this->successor->handleRequest(request); } } } }; class Manager : public Leader{ private: string name; public: Manager(string name):Leader(name){} void handleRequest(PurchaseRequest *request) { if(request->getMoney()<=5) { cout<<"部門經理"<<name<<"審批"<<request->getMoney()<<"萬元的採購單"<<endl; } else { if(this->successor!=NULL) { this->successor->handleRequest(request); } } } }; class DeputyGeneralManager: public Leader{ private: string name; public: DeputyGeneralManager(string name):Leader(name){} void handleRequest(PurchaseRequest *request) { if(request->getMoney()<=10) { cout<<"副總經理"<<name<<"審批"<<request->getMoney()<<"萬元的採購單"<<endl; } else { if(this->successor!=NULL) { this->successor->handleRequest(request); } } } }; class GeneralManager: public Leader{ private: string name; public: GeneralManager(string name):Leader(name){} void handleRequest(PurchaseRequest *request) { if(request->getMoney()<=20) { cout<<"總經理"<<name<<"審批"<<request->getMoney()<<"萬元的採購單"<<endl; } else if(request->getMoney()>20) { cout<<"總經理"<<name<<"召開職工大會審批"<<request->getMoney()<<"萬元的採購單"<<endl; } else { if(this->successor!=NULL) { this->successor->handleRequest(request); } } } }; int main(){ Leader *objDirector,*objManager,*objDeputyGeneralManager,*objGeneralManager; objDirector=new Director("張三"); objManager=new Manager("李四"); objDeputyGeneralManager=new DeputyGeneralManager("王五"); objGeneralManager=new GeneralManager("趙六"); objDirector->setSuccessor(objManager); objManager->setSuccessor(objDeputyGeneralManager); objDeputyGeneralManager->setSuccessor(objGeneralManager); PurchaseRequest *pr1=new PurchaseRequest(1); objDirector->handleRequest(pr1); PurchaseRequest *pr2=new PurchaseRequest(3); objDirector->handleRequest(pr2); PurchaseRequest *pr3=new PurchaseRequest(8); objDirector->handleRequest(pr3); PurchaseRequest *pr4=new PurchaseRequest(12); objDirector->handleRequest(pr4); PurchaseRequest *pr5=new PurchaseRequest(22); objDirector->handleRequest(pr5); return 0; }

執行結果: