【java】(软考)面向对象---责任链解析

server/2024/10/22 5:04:10/

目录

责任链的意义

手写笔记

​编辑


责任链的意义

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

从而避免请求的发送者和接受者之间的耦合关系

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

题目描述

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

手写笔记及解析

代码 

java">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);}
}

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


http://www.ppmy.cn/server/6094.html

相关文章

机器学习理论基础—神经网络算法公式学习

机器学习理论基础—神经网络公式学习 M-P神经元 M-P神经元&#xff08;一个用来模拟生物行为的数学模型&#xff09;&#xff1a;接收n个输入(通常是来自其他神经 元)&#xff0c;并给各个输入赋予权重计算加权和&#xff0c;然后和自身特有的阈值进行比较 (作减法&#xff0…

信号分解 | VMD(变分模态分解)-Matlab

分解效果 VMD(变分模态分解) 变分模态分解(Variational Mode Decomposition,VMD)是一种信号分解方法,用于将非平稳信号分解为一组模态函数。VMD是一种自适应的数据驱动方法,可以有效地处理具有非线性和非平稳特性的信号。 VMD的基本思想是通过迭代优化过程,将原始信号分…

HarmonyOs开发:导航tabs组件封装与使用

前言 主页的底部导航以及页面顶部的切换导航&#xff0c;无论哪个系统&#xff0c;哪个App&#xff0c;都是最常见的功能之一&#xff0c;虽然说在鸿蒙中有现成的组件tabs可以很快速的实现&#xff0c;但是在使用的时候&#xff0c;依然有几个潜在的问题存在&#xff0c;第一&a…

一文学会 ts 构建工具 —— tsup

文章目录 能打包什么&#xff1f;安装用法自定义配置文件条件配置在 package.json 中配置多入口打包生成类型声明文件sourcemap生成格式自定义输出文件代码分割产物目标环境支持 es5编译的环境变量对开发命令行工具友好监听模式 watch提供成功构建的钩子 onSuccess压缩产物 min…

Rust常用特型之AsRef和AsMut特型

在Rust标准库中&#xff0c;存在很多常用的工具类特型&#xff0c;它们能帮助我们写出更具有Rust风格的代码。 今天我们要学习的AsRef和AsMut&#xff0c;和前面学习的Deref和DerefMut有那么一点混淆的地方。 当一个类型U实现了AsRef<T>&#xff0c;那么我们可以高效的从…

DevOps(六)Git特点和命令详解

Git 是一个分布式版本控制系统&#xff0c;用于跟踪软件开发过程中对文件的修改&#xff0c;使得团队成员可以在不同的地方工作&#xff0c;同时保持代码的一致性和完整性。它由 Linus Torvalds 于 2005 年开发&#xff0c;主要用于 Linux 内核的开发&#xff0c;后来被广泛应用…

HTML不常用的文本标签

1.标签如下&#xff1a; 代码及相关内容 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>不常用的文…

算法课程笔记——STL键值对map

map当下标无限的数组 重点是对应关系&#xff0c;一般不修改compare 类比set 没有lowerbound&#xff0c;因为遍历是无序的 ; map不能用sort函数排序 但可用vector转化为map使用 std::set<std::pair<TKEY, mutable TVAL> > ≈ std::map<TKEY, TVAL>