【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);}
}

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

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

SpringBoot学习之Kafka下载安装和启动(三十三)

一、Mac环境 1、下载Kafka&#xff1a;Apache Kafka 2、这里我选择的版本是kafka_2.12-3.7.0&#xff0c;下载最新版的Kafka二进制文件&#xff0c;解压到你喜欢的目录&#xff08;建议目录不要带中文&#xff09;。 3、启动ZooKeeper服务&#xff0c;Kafka需要使用ZooKeeper&…

OpenHarmony 网络管理-Socket连接

介绍 本示例主要演示了Socket在网络通信方面的应用&#xff0c;展示了Socket在两端设备的连接验证、聊天通信方面的应用。 效果预览 使用说明 1.搭建服务器环境&#xff1a;修改服务器脚本中的服务端IP地址&#xff0c;与本机IP地址保持一致&#xff0c;修改完成后双击运行脚…

Zynq 7000 系列中的JTAG和DAP子系统

Zynq 7000系列SoC器件通过标准JTAG调试接口提供调试访问。在内部&#xff0c;SoC设备器件在处理系统&#xff08;PS&#xff09;内部实现了一个Arm调试访问端口&#xff08;DAP&#xff09;&#xff0c;同时在可编程逻辑&#xff08;PL&#xff09;内部实现了一个标准的JTAG测试…

minio如何配置防盗链

MinIO 是一个开源的对象存储服务器&#xff0c;用于存储大量的数据&#xff0c;同时提供了丰富的功能和 API。配置防盗链可以帮助你控制谁可以访问存储在 MinIO 上的对象。以下是在 MinIO 中配置防盗链的一般步骤&#xff1a; 编辑 config.json 文件&#xff1a; 找到 MinIO 服…

每日昨日之螺旋矩阵

螺旋矩阵 给你一个 m 行 n 列的矩阵 matrix &#xff0c;请按照 顺时针螺旋顺序 &#xff0c;返回矩阵中的所有元素。 示例 1&#xff1a; 输入&#xff1a;matrix [[1,2,3],[4,5,6],[7,8,9]] 输出&#xff1a;[1,2,3,6,9,8,7,4,5] 示例 2&#xff1a; 输入&#xff1a;…

文心一言 VS 讯飞星火 VS chatgpt (241)-- 算法导论17.3 7题

七、为动态整数多重集 S (允许包含重复值)设计一种数据结构&#xff0c;支持如下两个操作&#xff1a;① INSERT(S,x) 将 x 插入 S 中&#xff1b;② DELETE-LARGER-HALF(S) 将最大的 ⌈|S|/2⌉ 个元素从S中删除。解释如何实现这种数据结构&#xff0c;使得任意 m 个 INSERT 和…

spring高级篇(二)

1、Aware和InitializingBean Aware和InitializingBean都与Bean的生命周期管理相关。 Aware接口: 概念: Aware接口是Spring框架中的一个标记接口&#xff0c;它表示一个类能够感知到&#xff08;aware of&#xff09;Spring容器的存在及其特定的环境。Spring框架提供了多个Awar…

sublime运行编译C和Java

1.先安装终端 参照以下教程 如何在 Sublime 文本编辑器中使用终端&#xff1f;_sublime终端窗口怎么打开-CSDN博客 可能遇到的问题&#xff1a;有些sublime text3可能并没有显示“package control”。这个问题对于笔者来说是有些吊诡的&#xff0c;因为之前一开始安装时是能…

nginx容器化方案预研

一、概述 目前 nginx迁移升级不方便,且生产环境没有编译环境,导致生产环境nginx版本过旧、目前存在安全漏洞无法升级。运维建议容器化nginx,因此预研了此容器方案 二、镜像制作 基础镜像 cloudservice-alpine-base-v1.tar 2.1 加载基础镜像 docker load -i cloudservic…

C++恶魔轮盘赌(道具版)

家人们&#xff0c;更新了昂&#xff0c;前文&#xff1a;来自阳了个阳C的恶魔轮盘赌无道具版 作为阳了个阳C的好同学&#xff0c;我光荣地揽下了道具版的重担 不多说话&#xff0c;直接上代码 #include<bits/stdc.h> #include<Windows.h> typedef long long ll…

STM32总结

1. Keil5 下载代码和编译代码需要注意的事项 下载代码&#xff1a; 安装包版本&#xff1a;确保选择与目标硬件兼容的Keil版本。工程设置&#xff1a;在下载代码前&#xff0c;检查工程的设置&#xff0c;确认芯片型号、晶振频率等信息是否正确配置。依赖库&#xff1a;确保所…

类和对象-对象特性-成员变量和成员函数分开存储

成员变量和成员函数分开存储 #include <bits/stdc.h> using namespace std; class Person{}; void test01(){Person p;//c编译器会给每个空对象也分配一个字节空间&#xff0c;是为了区分空对象占内存的位置//每个空对象也应该有一个独一无二的内存地址 cout<<si…

每天学习一个Linux命令之basename

每天学习一个Linux命令之basename 简介 在Linux系统中&#xff0c;basename是一个用于获取一个文件名或目录名的基本名称的命令。它可以用来去除路径前缀或者获取文件名的纯粹部分。basename常用于脚本编程和文件处理&#xff0c;非常实用。 基本用法 basename命令的基本语…

创建socket服务端和客户端--通信(简单入门)

目录 服务端(server) 客户端(client) 服务端(server) socket_client.py import socket #用的协议必须是同一个(要不然交流根本听不懂啊) # 1、创建服务器的socket对象 tcp_server_socket socket.socket(socket.AF_INET, socket.SOCK_STREAM)# 2、绑定IP和端口 tcp_server_…

【大模型系列】大模型评价指标总结

文章目录 1 图生文 (Image-to-Text)1.1 BLEU&#xff1a;基于准确率&#xff0c;得分越高越好1.2 METEOR&#xff1a;基于准确率和召回率&#xff0c;得分越高越好1.3 ROUGE&#xff1a;得分越高越好1.4 CIDEr&#xff1a;得分越高越好1.5 SPICE&#xff1a;得分越高越好1.6 Hu…

文本美学:text-image打造视觉吸引力

当我最近浏览 GitHub 时&#xff0c;偶然发现了一个项目&#xff0c;它能够将文字、图片和视频转化为文本&#xff0c;我觉得非常有趣。于是我就花了一些时间了解了一下&#xff0c;发现它的使用也非常简单方便。今天我打算和家人们分享这个发现。 项目介绍 话不多说&#xf…

4.2冰达机器人:视觉实例-机器人视觉循线、视觉实例-调整循线颜色

4.2.10a视觉实例-机器人视觉循线 本节内容演示一个机器人视觉的视觉循线实例 准备工作&#xff1a;布置一块区域作为循线场所&#xff0c;如下图所示。用蓝色胶带在地面贴一条路线&#xff08;机器人极限转弯半径0.5m&#xff0c;不要贴得过于曲折&#xff09;&#xff0c;将…

【超级简单】vscode进入服务器的docker容器

前提 1、已经运行docker容器 2、已经用vscode链接服务器 在vscode中安装的插件 Dev Containers docker 在容器中安装的依赖 yum install openssh-server yum install openssh-clientsvscode进入服务器的docker容器 找到自己的容器&#xff0c;右键点击&#xff0c;找到…

c#多线程 使用lock锁

使用 lock 关键字可以确保在同一时刻只有一个线程可以访问被锁定的代码块&#xff0c;从而避免线程资源竞争。以下是修改后的示例代码&#xff1a; using System; using System.Threading;class Program {static int sharedNumber 0;static int iterations 1000000;static o…

从零开始学习写Shell脚本【第二期,语法说明-变量】

从零开始学习写Shell脚本【第一期&#xff0c;语法说明-变量】 Shell脚本的语法包括变量、控制结构、函数等&#xff1a; 变量的定义&#xff1a;使用符号进行赋值&#xff0c;不需要指定类型。变量的引用&#xff1a;使用$符号加上变量名。例子 # 变量定义 name"John&…