c++实现职责链模式--财务审批
内容:
某物资管理系统中物资采购需要分级审批,主任可以审批1万元及以下的采购单,部门经理可以审批5万元及以下的采购单,副总经理可以审批10万元及以下的采购单,总经理可以审批20万元及以下的采购单,20万元以上的采购单需要开职工大会确定。现用职责链模式设计该系统。
代码:
#includeusing 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<<"审批"< 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<<"部门经理"< "审批"< 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<<"副总经理"< "审批"< 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<<"总经理"< "审批"< getMoney()<<"万元的采购单"<<endl; } else if(request->getMoney()>20) { cout<<"总经理"< "召开职工大会审批"< 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; }
运行结果: