财务审批
某物资管理系统中物资采购需要分级审批,主任可以审批1万元及以下的采购单,部门经理可以审批5万元及以下的采购单,副总经理可以审批10万元及以下的采购单,总经理可以审批20万元及以下的采购单,20万元以上的采购单需要开职工大会确定。现用职责链模式设计该系统。
类图
java
package rjsj.no15; public abstract class Leader { protected String name; //上级领导 protected Leader successor; public Leader(String name) { this.name = name; } public void setSuccessor(Leader successor) { this.successor = successor; } protected abstract void handleRequest(ShoppingRequest request); }
package rjsj.no15; public class ShoppingRequest { private String shoppingReason; private double billMoney; public ShoppingRequest(String shoppingReason,double billMoney){ this.shoppingReason = shoppingReason; this.billMoney = billMoney; } public String getShoppingReason() { return shoppingReason; } public void setShoppingReason(String shoppingReason) { this.shoppingReason = shoppingReason; } public double getBillMoney() { return billMoney; } public void setBillMoney(double billMoney) { this.billMoney = billMoney; } }
package rjsj.no15; public class Client { public static void main(String[] args) { Leader objDirector,objDepartmentManager,objViceManager,objGeneralManager; objDirector = new Director("张主任"); objDepartmentManager = new DepartmentManager("刘部门经理"); objViceManager = new ViceManager("王副经理"); objGeneralManager = new GeneralManager("赵经理"); //设置上级 objDirector.setSuccessor(objDepartmentManager); objDepartmentManager.setSuccessor(objViceManager); objViceManager.setSuccessor(objGeneralManager); ShoppingRequest shoppingRequest1 = new ShoppingRequest("买打印纸",1000); ShoppingRequest shoppingRequest2 = new ShoppingRequest("购置电脑",20000); ShoppingRequest shoppingRequest3 = new ShoppingRequest("购置空调",80000); ShoppingRequest shoppingRequest4 = new ShoppingRequest("办公室装修",160000); ShoppingRequest shoppingRequest5 = new ShoppingRequest("收购XX公司",1000000); objDirector.handleRequest(shoppingRequest1); System.out.println("****************************************"); objDirector.handleRequest(shoppingRequest2); System.out.println("****************************************"); objDirector.handleRequest(shoppingRequest3); System.out.println("****************************************"); objDirector.handleRequest(shoppingRequest4); System.out.println("****************************************"); objDirector.handleRequest(shoppingRequest5); System.out.println("****************************************"); } }
package rjsj.no15; //主任 class Director extends Leader{ public Director(String name) { super(name); } public void handleRequest(ShoppingRequest request){ if (request.getBillMoney()<10000.00){ System.out.println(name + "主任处理物资采购" + request.getShoppingReason() + "采购资金为" + request.getBillMoney() + "元"); } else { if (this.successor != null){ this.successor.handleRequest(request); } } } } //部门经理 class DepartmentManager extends Leader{ public DepartmentManager(String name) { super(name); } protected void handleRequest(ShoppingRequest request) { if (request.getBillMoney()<50000.00){ System.out.println(name + "部门经理处理物资采购" + request.getShoppingReason() + "采购资金为" + request.getBillMoney() + "元"); } else { if (this.successor != null){ this.successor.handleRequest(request); } } } } //副经理 class ViceManager extends Leader{ public ViceManager(String name) { super(name); } @Override protected void handleRequest(ShoppingRequest request) { if (request.getBillMoney()<100000.00){ System.out.println(name + "副经理处理物资采购" + request.getShoppingReason() + "采购资金为" + request.getBillMoney() + "元"); } else { if (this.successor != null){ this.successor.handleRequest(request); } } } } //总经理 class GeneralManager extends Leader{ public GeneralManager(String name) { super(name); } @Override protected void handleRequest(ShoppingRequest request) { if (request.getBillMoney()<200000.00){ System.out.println(name + "总经理处理物资采购" + request.getShoppingReason() + "采购资金为" + request.getBillMoney() + "元"); } else { System.out.println("董事会将开会处理物资采购" + request.getShoppingReason() + "采购资金为" + request.getBillMoney() + "元"); } } }
C++
#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; }
运行结果
标签:name,软件设计,模式,Leader,PurchaseRequest,handleRequest,new,public,职责 From: https://www.cnblogs.com/libin159/p/16816973.html