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

目录

责任链的意义

手写笔记

​编辑


责任链的意义

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

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

这里以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);

    }
}

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/561858.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

EFK安装与使用!!!

一、将你的项目进行打包。 二、上传到docker&#xff0c; 启动项目 三、修改前端的代理路径 四、EFK相关配置 1、docker-compose.yml&#xff1a; version: 3 services:kibana:image: kibana:7.14.0ports:- "5601:5601"environment:- ELASTICSEARCH_HOSTShttp://19…

Excel数据处理:使用条件格式

选中你要特别体现的列 然后在开始处点击条件格式 标记大于1500000的值 点击突出显示 点击大于 输入1500000 设置单元格格式 点击条件格式 点击清除 去掉表头的格式 标记重复值强调显示 公式的使用 要去锁定单元格的值&#xff08;加上F4&#xff09; 比较后一列相同位置…

数据结构(七)——B树和B+树

7.4.1_1 B树 5叉查找树 //5叉排序树的结点定义 struct Node {ElemType keys[4]; //最多4个关键字struct Node &child[5]; //最多5个孩子int num; //结点中有几个关键字 }; 如何保证查找效率&#xff1f; eg:对于5叉排序树&#xff0c;规定…

kafka学习1 - 线程、进程消息通信方式、JMS模型、Kafka原理图

1、线程和线程之间的数据交互 两个不同的线程之间是可以通过堆内存的方式进行数据交互的&#xff1b; T1线程的数据发送得到堆内存&#xff0c;T2线程就可以共享堆内存的数据。 存在的问题&#xff1a; T1线程发送数据的速率是50/s&#xff0c;T2线程消费的速率是30/s&#…

Jmeter-非GUI模式下运行jmeter脚本-适用于服务器上持续集成测试

背景 大部分Jmeter脚本都是部署在Linux上运行&#xff0c;利用Jenkins做接口自动化&#xff0c;定时巡检任务。 执行命令 1.进入jmeter的目录&#xff0c;bin文件夹 cd C:\path\to\jmeter\bin2.运行脚本文件 jmeter -n -t D:\{脚本文件目录}\xxx.jmx -l D:\{脚本文件目录}…

mac可以玩steam吗 mac安装steam教程 苹果电脑能打steam游戏吗 苹果电脑怎么安装windows 苹果mac电脑配置AI功能的M4芯片

众所周知&#xff0c;Steam作为一个热门的游戏平台&#xff0c;深受国内外玩家的喜爱&#xff0c;平台中包含了无数的游戏&#xff0c;在作战时玩家们能够与朋友们互动聊天&#xff0c;还能匹配好友组队&#xff0c;同时还能增进与同伴的默契度。 但是最近有玩家们提问说&#…

Python编程技巧揭秘:深入理解Lambda函数,如何使用匿名函数简化你的代码

文章目录 1. Lambda函数2. 在实际应用中使用Lambda2.1 使用Lambda函数进行列表排序2.2 在高阶函数中使用Lambda 3. Lambda的局限性和注意点 在这篇文章中&#xff0c;将深入探讨Python中的Lambda函数&#xff0c;这是一种强大的编程工具&#xff0c;可以以更简洁、高效的方式编…

C语言:内存动态开辟

一、malloc和free 1.如果开辟成功&#xff0c;则返回一个指向开辟好空间的指针。 2.如果开辟失败&#xff0c;则返回一个NULL指针&#xff0c;因此malloc的返回值一定要做检查。 3.返回值的类型是 void* &#xff0c;所以malloc函数并不知道开辟空间的类型&#xff0c;具体在…

【已解决】win10系统 Docker 提示Docker Engine stopped解决全过程记录

【已解决】win10系统 Docker 提示Docker Engine stopped解决全过程记录 一、检查服务是否开启 找到 【Docker Desktop Service】&#xff0c;然后&#xff0c;启动他&#xff1b; 你也可以直接设置为“自动” 找到服务&#xff0c;右键》属性》启动类型&#xff1a;自动》点击…

java解决常见递归问题

最基本的&#xff0c;斐波那契数列&#xff0c;阶乘&#xff08;0&#xff0c;1的阶乘均为1&#xff09; 返回字母“x”第一次出现的位置 使用递归编写一个函数&#xff0c;读取一个字符串&#xff0c;返回字母“x”第一次出现的位置。例如&#xff0c;字符串 "abcdefgh…

014Node.js时间格式包silly-datetime安装与使用

下载&#xff1a; https://www.npmjs.com/网站上下载silly-datetime 安装 npm i silly-datetime --save var sd require(silly-datetime);console.log(new Date()); //2024-04-18T04:40:38.505Zvar dsd.format(new Date(), YYYY-MM-DD HH:mm);console.log(d); //2024…

B树(B-tree)

B树(B-tree) B树(B-tree)是一种自平衡的多路查找树&#xff0c;主要用于磁盘或其他直接存取的辅助存储设备 B树能够保持数据有序&#xff0c;并允许在对数时间内完成查找、插入及删除等操作 这种数据结构常被应用在数据库和文件系统的实现上 B树的特点包括&#xff1a; B树为…

前端常用的数据加密方式

前端开发中&#xff0c;数据安全是至关重要的一个方面。数据加密是保护用户隐私和信息安全的关键方法之一。 前端常用的数据加密方式涵盖了对传输数据的加密、存储数据的加密以及客户端与服务器端之间通信的加密。 1. 对称加密算法 对称加密算法使用相同的密钥进行加密和解密…

STM32H750外设ADC之双重 ADC 模式

目录 概述 1 双重 ADC 模式介绍 1.1 双重 ADC模式 1.2 双重 ADC 模式的类型 2 双重 ADC 模式寄存器的配置 3 模式功能实现 3.1 注入同步模式 3.2 支持独立注入的常规同步模式 3.2.1 中断的方式 3.2.2 DMA 读取常规数据 3.3 支持独立注入的交替模式 3.3.1 中断触发…

Java面试八股之简述Servlet体系结构

简述Servlet体系结构 Servlet是Java Web开发中的核心组件&#xff0c;用于接收和响应HTTP请求&#xff0c;生成动态内容。它具有平台无关性、协议无关性和动态内容生成能力&#xff0c;遵循明确的生命周期。尽管现代Web开发中更多使用高级框架&#xff0c;但Servlet作为基础&a…

安装WSL2

PS C:\Users\pc> wsl --set-default-version 2 有关与 WSL 2 关键区别的信息&#xff0c;请访问 https://aka.ms/wsl2操作成功完成。PS C:\Users\pc> wsl --update 正在检查更新。 已安装最新版本的适用于 Linux 的 Windows 子系统。PS C:\Users\pc> wsl --shutdownPS…

中霖教育:报名一级建造师查社保吗?

一级建造师考试报名是否需要查社保&#xff1f;不同地区的要求不一样&#xff0c;有些地区需要考生提供社保&#xff0c;但是有些地区则无需出示社保证明。建议考生详细阅读当地考试通知&#xff0c;以确认是否涉及社保的相关要求。 在要求提供社保证明的地区&#xff0c;报名…

Jira搭建过程

看到很多小伙伴对jira有兴趣,我们今天就来分享一下jira的搭建吧 首先要明白jira是什么? 看来搭建jira也是我们测试人员需要具备的技能之一了.下面是详细的大家步骤: 1.系统环境准备 Centos 7.5 Mysql 5.6 Java1.8 2.软件安装包 atlassian-jira-software-7.13.0-x64.bin …

c++的学习之路:26、AVL树

摘要 本章主要是说一下AVL树的实现&#xff0c;这里说的是插入的底层原理 目录 摘要 一、原理 二、四种旋转 1、左单旋 2、右单旋 3、左右双旋 4、右左双旋 三、代码实现 1、节点创建 2、插入 3、旋转 4、判断是否平衡 5、测试 四、代码 一、原理 前面说了搜索…

刷代码随想录有感(38):N叉树的层序遍历

题干&#xff1a; 代码&#xff1a; // Definition for a Node. class Node { public:int val;vector<Node*> children;Node(int _val, vector<Node*> _children) {val _val;children _children;} };class Solution { public:vector<vector<int>> l…