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

    某物资管理系统中物资采购需要分级审批,主任可以审批1万元及以下的采购单,部门经理可以审批5万元及以下的采购单,副总经理可以审批10万元及以下的采购单,总经理可以审批20万元及以下的采购单,20万元以上的采购单需要开职工大会确定。现用职责链模式设计该系统。

    package 职责链模式;
    
    import java.math.BigDecimal;
    
    class Director extends Leader{
           public Director(String name){
                super(name);
            }
            public void handlerRequest(Request request){
               BigDecimal bigDecimal=new BigDecimal(10000.00);
                if(request.getCost().compareTo(bigDecimal)==-1||request.getCost().compareTo(bigDecimal)==0){
                    System.out.println("主任"+name+"审批,采购金额为:"+request.getCost());
                }
                else {
                    this.successor.handlerRequest(request);
                }
            }
        }
    Director
    package 职责链模式;
    
    import java.math.BigDecimal;
    
    class GeneralManager extends Leader{
        public GeneralManager(String name){
            super(name);
        }
        public void handlerRequest(Request request){
            BigDecimal bigDecimal=new BigDecimal(100000.00);
            if(request.getCost().compareTo(bigDecimal)==-1||request.getCost().compareTo(bigDecimal)==0){
                System.out.println("副总经理"+name+"审批,采购金额为:"+request.getCost());
            }
            else {
                this.successor.handlerRequest(request);
            }
        }
    }
    GeneralManager
    package 职责链模式;
    
    abstract public class Leader {
        protected String name;
        protected Leader successor;
     
        public void setSuccessor(Leader successor){
            this.successor=successor;
        }
     
        public  Leader(String name){
            this.name=name;
        }
        abstract public void handlerRequest(Request request);
    }
    Leader
    package 职责链模式;
    
    import java.math.BigDecimal;
    
    class PartmentManager extends Leader{
        public PartmentManager(String name){
            super(name);
        }
        public void handlerRequest(Request request){
            BigDecimal bigDecimal=new BigDecimal(50000.00);
            if(request.getCost().compareTo(bigDecimal)==-1||request.getCost().compareTo(bigDecimal)==0){
                System.out.println("部门经理"+name+"审批,采购金额为:"+request.getCost());
            }
            else {
                this.successor.handlerRequest(request);
            }
        }
    }
    PartmentManager
    package 职责链模式;
    import java.math.BigDecimal;
    import java.util.ArrayList;
     
    public class TestLeader {
        public static void main(String args[]) {
            Leader director = new Director("Tom"),
            partmentManager = new PartmentManager("Jack"),
            generalManager = new GeneralManager("Rose"),
            vic = new VicManager("Wang");
     
            director.setSuccessor(partmentManager);
            partmentManager.setSuccessor(generalManager);
            generalManager.setSuccessor(vic);
     
            Request request=new Request(new BigDecimal(70000.00)),
                    request1=new Request(new BigDecimal(150000.00)),
                    request2=new Request(new BigDecimal(220000.00));
            director.handlerRequest(request);
            director.handlerRequest(request1);
            director.handlerRequest(request2);
            
        }
    }
    TestLeader
    package 职责链模式;
    
    import java.math.BigDecimal;
    
    class Request{
        private BigDecimal cost;
        public Request(BigDecimal bigDecimal){
            this.cost=bigDecimal;
        }
        public BigDecimal getCost(){
            return cost;
        }
        public void setCost(BigDecimal bigDecimal){
            this.cost=bigDecimal;
    
        }
    }
    Request
    package 职责链模式;
    
    import java.math.BigDecimal;
    
    class VicManager extends Leader{
        public VicManager(String name){
            super(name);
        }
        public void handlerRequest(Request request){
            BigDecimal bigDecimal=new BigDecimal(200000.00);
            if(request.getCost().compareTo(bigDecimal)==-1||request.getCost().compareTo(bigDecimal)==0){
                System.out.println("总经理"+name+"审批,采购金额为:"+request.getCost());
            }
            else {
                System.out.println("采购金额为:"+request.getCost()+"   "+"数额过大,需开会决定!");
            }
        }
    }
    VicManager
  • 相关阅读:
    我们的微信小程序开发
    node.js的模块引用
    关于 node.js的request事件
    关于 node.js 小插曲
    发给
    Kotlin 委托(1)类委托、变量委托注意事项
    Kotlin 扩展
    关于dex 64K 引用限制
    c++新特性实验(5)声明与定义:属性列表(C++11 起)
    apk反编译(6)用ProGuard 混淆、压缩代码,压缩资源。
  • 原文地址:https://www.cnblogs.com/feng747/p/15574871.html
Copyright © 2011-2022 走看看