zoukankan      html  css  js  c++  java
  • 软件设计职责链模式

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

    运行结果

  • 相关阅读:
    User Get 'Access Denied' with Excel Service WebPart
    How To Search and Restore files from Site Collection Recycle Bin
    How To Collect ULS Log from SharePoint Farm
    How To Restart timer service on all servers in farm
    How to Operate SharePoint User Alerts with PowerShell
    How to get Timer Job History
    Synchronization Service Manager
    SharePoint 2007 Full Text Searching PowerShell and CS file content with SharePoint Search
    0x80040E14 Caused by Max Url Length bug
    SharePoint 2007 User Re-created in AD with new SID issue on MySite
  • 原文地址:https://www.cnblogs.com/Arisf/p/15685672.html
Copyright © 2011-2022 走看看