【java】一次请求就可以得到结果的反踢皮球大法!---责任链解析

目录

责任链的意义

手写笔记

​编辑


责任链的意义

如果您是一名小员工,某天需要拿着采购单去求经费(大约20块钱的样子~~),您先找到主任

主任说:sorry~我没有这个权利哦

然后您去找副董

副董说:sorry~我没有这个权利哦

然后您去找董事长

董事长说:(ノ`Д)ノ滚去找主任,屁大点事还要麻烦我!!![○・`Д´・ ○]

这时您会发现:您!被!踢!皮!球!啦!

但是!!!!!!!!!!!!!

如果您所在的公司采取的是责任链方式的话,您就完全不用担心啦~~~

 

当您把请求给出时,如果某对象不能实现您的操作,责任链会自动把您的请求传给它的下一级

从而避免请求的发送者和接受者之间的耦合关系,这就是责任链

这里以2007年下半年试题七进行说明

题目描述

某企业的采购审批是分级进行的,即根据采购金额的不同由不司层次的主管人员来审批,主任可以审批5 万元以下(不包括 5 万元)的采购单,副董事长可以审批5 万元至 10万元(不包括 10万元)的采购单,董事长可以审批 10 万元至 50 万元(不包括 50 万元)的采购单,50 万元及以上的采购单就需要开会讨论决定

手写笔记及解析

代码 

import java.util.Scanner;

class PurchaseRequest{
    Double Amount;
    int Number;
    String purpose;
}
class Approver{

    private Approver successor;
    public Approver(){
        successor = null;
    }
    public void SetSuccessor(Approver aSuccessor)
    {
        successor = aSuccessor;
    }
    public void ProcessRequest(PurchaseRequest aRequest)
    {
        if(successor != null)
        {
            successor.ProcessRequest(aRequest);
        }
    }
}

class Director extends Approver{
    public void ProcessRequest(PurchaseRequest aRequest){
        if(aRequest.Amount<=50000)
        {
            System.out.println("主任审批通过啦~");
        }
        else{
            super.ProcessRequest(aRequest);
        }
    }
}
class VicePresident extends Approver{
    public void ProcessRequest(PurchaseRequest aRequest){
        if(aRequest.Amount<=100000)
        {
            System.out.println("副董审批通过啦~");
        }
        else{
            super.ProcessRequest(aRequest);
        }
    }
}
class President extends Approver{
    public void ProcessRequest(PurchaseRequest aRequest){
        if(aRequest.Amount<=500000)
        {
            System.out.println("董事审批通过啦~");
        }
        else{
            super.ProcessRequest(aRequest);//子类不需要再次声明类型
        }
    }
}
class Congress extends Approver{
    public void ProcessRequest(PurchaseRequest aRequest){
        if(aRequest.Amount>=500000)
        {
            System.out.println("例会审批通过啦~");
        }
        else{
            super.ProcessRequest(aRequest);
        }
    }
}
public class RS {
    public static void main(String[] args) {
        Congress Meeting = new Congress();
        Director Jimmy = new Director();
        VicePresident Mike = new VicePresident();
        President Maggie = new President();

        PurchaseRequest aRequest = new PurchaseRequest();

//    构造责任链
        Meeting.SetSuccessor(null);
        Jimmy.SetSuccessor(Mike);
        Mike.SetSuccessor(Maggie);
        Maggie.SetSuccessor(Meeting);


        Scanner input = new Scanner(System.in);
        aRequest.Amount = input.nextDouble();

        Jimmy.ProcessRequest(aRequest);

    }
}

今天的分享到这里就结束啦~希望能帮到您!!

  • 5
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值