• 软件设计职责链模式


    财务审批
    某物资管理系统中物资采购需要分级审批,主任可以审批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;
    }

    运行结果

  • 相关阅读:
    你的C/C++程序为什么无法运行?揭秘Segmentation fault (2)
    亲,这就是遗传算法
    我们为什么需要Map-Reduce?
    搜索引擎-架构概述(2)
    搜索引擎-架构概述(1)
    单源最短路径-迪杰斯特拉算法(Dijkstra's algorithm)
    最小生成树-普利姆算法eager实现
    最小生成树-普利姆算法lazy实现
    最小生成树-克鲁斯卡尔算法(kruskal's algorithm)实现
    索引式优先队列(indexed priority queue)
  • 原文地址:https://www.cnblogs.com/Arisf/p/15685672.html
Copyright © 2020-2023  润新知