软件设计职责链模式

 

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

 

posted @ 2021-11-18 22:26  陈涵  阅读(42)  评论(0编辑  收藏  举报