当前位置: 首页 > news >正文

案例18-面向对象之开门小例子

目录

一:背景介绍

二:思路&方案

1.面向过程

2.面向对象

3.面向对象(反射)

三:过程

1.面向过程:原本何老师的作用交给我了米老师来完成。

2.面向对象:把开门的方法完全交个何老师,米老师不需要有开门的操作

3.面向对象(反射):米老师不仅仅可以叫何老师来开门,也可以叫其他老师开门

四:总结


一:背景介绍

        米老师需要开办公室的门,需要进入办公室进行工作。这时候需要何老师来进行开门的操作。

二:思路&方案

1.面向过程

        何老师管理钥匙,米老师需要开门,何老师把钥匙方法一个位置上。米老师到壹佰之后去拿钥匙 自己去执行开门的操作。

2.面向对象

        米老师到达公司之后,米老师喊一下何老师打开办公室的门,何老师听到消息之后就过来开门了。

3.面向对象(反射)

        米老师到达公司之后,米老师喊了一下给我开一下办公室的门,听到米老师消息的任意一个老师都可以过来开门。

三:过程

1.面向过程:原本何老师的作用交给我了米老师来完成。

代码

public class Client {public static void main(String[] args) {System.out.println("米老师:我需要开门");System.out.println("何老师:米老师,钥匙放在前台了,您开一下吧");System.out.println("米老师:去前台拿钥匙自己去开门了");}
}

效果

2.面向对象:把开门的方法完全交个何老师,米老师不需要有开门的操作

客户端

public class Client {public static void main(String[] args) {Notice notice=new Notice();notice.notice();}
}

业务封装类

public class Notice {private void TeahcerMiDependTeacherHeBusiness(){ReceiveMsg receiveMsgTeacherHe=new ReceiveMsg();receiveMsgTeacherHe.receiveMsg(new SendMsg());}public void notice(){this.TeahcerMiDependTeacherHeBusiness();}
}

发消息类

public class SendMsg {public void sendMsg(){System.out.println("米老师:我需要开一下门");}
}

收消息类

public class ReceiveMsg {private void open(){System.out.println("何老师:开门中。。。。。。门已打开");}public void receiveMsg(SendMsg sendMsgTeacherMi){sendMsgTeacherMi.sendMsg();this.open();}
}

结果

3.面向对象(反射):米老师不仅仅可以叫何老师来开门,也可以叫其他老师开门

客户端

public class Client {public static void main(String[] args) throws ClassNotFoundException, NoSuchMethodException, InvocationTargetException, InstantiationException, IllegalAccessException, IOException {Notice notice=new Notice();notice.notice();}
}

业务封装类

public class Notice {private void MiAndHeBusiness() throws ClassNotFoundException, InvocationTargetException, IllegalAccessException, NoSuchMethodException, InstantiationException, IOException {TeacherHe teacherHe = new TeacherHe();teacherHe.acceptMessage();}public void notice() throws ClassNotFoundException, InvocationTargetException, NoSuchMethodException, InstantiationException, IllegalAccessException, IOException {this.MiAndHeBusiness();}
}

发送消息类

public class TeacherMi {public void sendMsg(){System.out.println("我需要开一下门");}public void sendMsgAndKey(String room,String key){System.out.println("这是"+room+"以后"+key+"由你来保管,快开门吧");}public static void sendMessage(){System.out.println("帮我开一下办公室的门");}
}

接收消息类

public class TeacherHe {public void acceptMessage() throws IOException, ClassNotFoundException, InvocationTargetException, IllegalAccessException, NoSuchMethodException, InstantiationException {this.acceptMsg();}private void acceptMsg() throws IllegalAccessException, InvocationTargetException, ClassNotFoundException, NoSuchMethodException, InstantiationException, IOException {BufferedReader br=new BufferedReader(new InputStreamReader(System.in));System.out.println("请输入要依赖的类路径");String className=br.readLine();System.out.println("请输入要执行的方法");String methodName=br.readLine();System.out.println("请输入方法要传入的第一个参数");String roomName=br.readLine();System.out.println("请输入方法要传入的第一个参数");String keyName=br.readLine();br.close();Class sendMsgClass=Class.forName(className);Method sendMsgMethod= sendMsgClass.getMethod(methodName,String.class,String.class);Object sender =  sendMsgClass.newInstance();sendMsgMethod.invoke(sender,roomName,keyName);System.out.println("收到了,我来开门了");this.open();}private void open(){System.out.println("正在开门中。。。。。。。。。。。 门开了");}
}

结果

四:总结

        面向过程和面向对象没有好坏之分,只是应用的场景不同。我们之所以要用面向对象的思想是因为我们要为后期的维护考虑,这样我们就需要写出来的代码容易扩展,复用性强。在面向对象的基础上使用反射,使我们的系统更加的灵活,在运行的过程中我们可以让给来开门都可以。 

相关文章:

案例18-面向对象之开门小例子

目录 一:背景介绍 二:思路&方案 1.面向过程 2.面向对象 3.面向对象(反射) 三:过程 1.面向过程:原本何老师的作用交给我了米老师来完成。 2.面向对象:把开门的方法完全交个何老师,米老师不需要有…...

【碎片化知识总结】三月第一周

目录 前言 1、开发中常用的 IDEA 编辑器,如何做到不用每次都重新配置? 2、如何使用 Python 获取视频文件信息? 3、使用 Java 的 try-with-resources 优化代码 4、使用 shell 脚本批量修改服务器某一目录下的文件后缀名称 5、MySQL优化&…...

从零开始的JSON库(1):启程

1. JSON 是什么 JSON(JavaScript Object Notation)是一个用于数据交换的文本格式,现时的标准为ECMA-404 。 虽然 JSON 源自于 JavaScript 语言,但它只是一种数据格式,可用于任何编程语言。现时具有类似功能的格式有X…...

【Java】数组

目录 1.数组的定义与初始化 2.遍历数组 3.认识null 4.引用变量 5.返回多个值 6.数组拷贝 7.数组逆序 8.数组填充 9.小练习 //将整形数组转化为字符串 //二分查找优化 //冒泡排序优化 10.二维数组 //遍历二维数组 //不规则的二维数组 1.数组的定义与初始化 int…...

【C++】非类型的模板参数,特化

目录 1.类型模板参数和非类型模板参数 2.特化 3. 模板的分离编译 4.模板的优缺点 1.类型模板参数和非类型模板参数 之前写模板传的都是类型——类型模板参数 现在想定义两个静态数组,数组长度不同,就可以用模板参数传数值而不是传类型 非类型模板…...

核方法(kernel Method)

核方法 核方法定义 一种能够将在原始数据空间中的非线性数据映射到高维线性可分的方法。 核方法的用处 1、低维数据非线性,当其映射到高维空间(feature space)时,可以用线性方法对数据进行处理。 2、线性学习器相对于非线性学…...

消息队列MQ用来做什么的,市场上主流的四大MQ如何选择?RabbitMQ带你HelloWorld!

文章目录MQ用来做什么的MQ会有什么样的麻烦MQ消息队列模式分类MQ消息队列常用协议市场主流四大MQRabbitMQ项目开发RabbitMQ中的组成部分MQ用来做什么的 省流 :系统解耦、异步调用、流量削峰 系统解耦 首先举例下面这个场景,现有ABCDE五个系统&#xff…...

2023年中国高校计算机大赛-团队程序设计天梯赛(GPLT)上海理工大学校内选拔赛(同步赛) A — E

2023年中国高校计算机大赛-团队程序设计天梯赛(GPLT)上海理工大学校内选拔赛(同步赛) 文章目录A -- A Xor B Problem题目分析codeB -- 吃苹果题目分析codeC -- n皇后问题题目分析codeD -- 分苹果题目分析codeE -- 完型填空题目分析codeA – A…...

一文分析Linux v4l2框架

说明: Kernel版本:4.14 ARM64处理器,Contex-A53,双核 使用工具:Source Insight 3.5, Visio 1. 概述 V4L2(Video for Linux 2):Linux内核中关于视频设备驱动的框架,对上向应用层提供…...

MFC常用控件使用(文本框、编辑框、下拉框、列表控件、树控件)

简介 本文章主要介绍下MFC常用控件的使用,包括静态文本框(Static Text)、编辑框(Edit Control)、下拉框(Combo Box)、列表控件(List Control)、树控件(Tree Control)的使用。 创建项目 我们选择 文件->新建->新建项目,选择MFC程序 选择基于对话…...

13 node 程序后台执行加上 tail 命令, 中断 tail 命令, 同时也中断了 node 程序

前言 呵呵 最近帮朋友解决问题[2022.09.08] 需要启动一个 node 程序, 然后 需要一个 startUp.sh 脚本 然后 反手写了一个过去, 按道理 来说 应该是 后台启动了对应的 node 程序, 然后将 标准输出, 错误输出 输出到 logs/nohup.log 日志文件中, 然后基于 tail 命令 来查看 …...

52癫痫发作预测的有效双自注意力残差网络

Effective dual self-attentional residual networks for epileptic seizure prediction 摘要 癫痫发作预测作为慢性脑疾病中最具挑战性的数据分析任务之一,引起了众多研究者的广泛关注。癫痫发作预测,可以在许多方面大大提高患者的生活质量&#xff0…...

【计算机网络】Tcp IP 面试题相关

互联网协议群(TCP/IP):多路复用是怎么回事? 1.【问题】IPv4 和 IPv6 有什么区别? IPv4 是用 32 位描述 IP 地址,理论极限约在 40 亿 IP 地址; IPv6 是用 128 位描述 IP 地址,IPv6 可…...

【MySQL】MySQL的存储引擎

目录 概念 分类 操作 概念 数据库存储引擎是数据库底层软件组织,数据库管理系统(DBMS)使用数据引擎进行创建、查 询、更新和删除数据。 不同的存储引擎提供不同的存储机制、索引技巧、锁定水平等功能。现在 许多不同的数据库管理系统…...

es6动态模块import()

目录 一、语法说明 二、适用场合 三、注意点 四、示例代码 五、效果 一、语法说明 import命令会被 JavaScript 引擎静态分析,先于模块内的其他语句执行(import命令叫做“连接” binding 其实更合适)。 // 报错 if (x 2) {import MyMod…...

【Flask】Jinja2模板(十四)

Jinja2是一个单独的Python包,Flask依赖Jinja2,安装Flask时会自动安装Jinja2。Jinja2可以将数据和模板结合在一起生成动态文本。 一、引入 来看一个最简单的视图函数: app.route(/) def hello_world():return Hello World! 这个…...

Mr. Cappuccino的第49杯咖啡——冒泡APP(升级版)之基于Docker部署Gitlab

冒泡APP(升级版)之基于Docker部署Gitlab基于Docker安装Gitlab登录Gitlab创建Git项目上传代码使用Git命令切换Git地址使用IDE更换Git地址基于Docker安装Gitlab 查看beginor/gitlab-ce镜像版本 下载指定版本的镜像 docker pull beginor/gitlab-ce:11.3.0…...

《机器学习》基础概念之【P问题】与【NP问题】

《机器学习》基础概念之【P问题】与【NP问题】 这里写目录标题《机器学习》基础概念之【P问题】与【NP问题】一、多项式&时间复杂度1.1. 多项式1.2.时间复杂度二、P问题 & NP问题2.1. P问题2.2.NP问题2.3.举例理解NP问题-TSP旅行商推销问题三、NP-hard问题&NP-C问题…...

WinRAR安装教程

文章目录WinRAR安装教程无广告1. 下载2. 安装3. 注册4. 去广告WinRAR安装教程无广告 1. 下载 国内官网:https://www.winrar.com.cn/ 2. 安装 双击,使用默认路径: 点击“安装”。 点击“确定”。 点击“完成”。 3. 注册 链接&#xff…...

C++:vector和list的迭代器区别和常见迭代器失效问题

迭代器常见问题的汇总vector迭代器和list迭代器的使用vector迭代器list迭代器vector迭代器失效问题list迭代器失效问题vector和list的区别vector迭代器和list迭代器的使用 学习C,使用迭代器和了解迭代器失效的原因是每个初学者都需要掌握的,接下来我们就…...

通过Wrangler CLI在worker中创建数据库和表

官方使用文档:Getting started Cloudflare D1 docs 创建数据库 在命令行中执行完成之后,会在本地和远程创建数据库: npx wranglerlatest d1 create prod-d1-tutorial 在cf中就可以看到数据库: 现在,您的Cloudfla…...

鸿蒙中用HarmonyOS SDK应用服务 HarmonyOS5开发一个医院挂号小程序

一、开发准备 ​​环境搭建​​: 安装DevEco Studio 3.0或更高版本配置HarmonyOS SDK申请开发者账号 ​​项目创建​​: File > New > Create Project > Application (选择"Empty Ability") 二、核心功能实现 1. 医院科室展示 /…...

【ROS】Nav2源码之nav2_behavior_tree-行为树节点列表

1、行为树节点分类 在 Nav2(Navigation2)的行为树框架中,行为树节点插件按照功能分为 Action(动作节点)、Condition(条件节点)、Control(控制节点) 和 Decorator(装饰节点) 四类。 1.1 动作节点 Action 执行具体的机器人操作或任务,直接与硬件、传感器或外部系统…...

在Ubuntu中设置开机自动运行(sudo)指令的指南

在Ubuntu系统中,有时需要在系统启动时自动执行某些命令,特别是需要 sudo权限的指令。为了实现这一功能,可以使用多种方法,包括编写Systemd服务、配置 rc.local文件或使用 cron任务计划。本文将详细介绍这些方法,并提供…...

BCS 2025|百度副总裁陈洋:智能体在安全领域的应用实践

6月5日,2025全球数字经济大会数字安全主论坛暨北京网络安全大会在国家会议中心隆重开幕。百度副总裁陈洋受邀出席,并作《智能体在安全领域的应用实践》主题演讲,分享了在智能体在安全领域的突破性实践。他指出,百度通过将安全能力…...

10-Oracle 23 ai Vector Search 概述和参数

一、Oracle AI Vector Search 概述 企业和个人都在尝试各种AI,使用客户端或是内部自己搭建集成大模型的终端,加速与大型语言模型(LLM)的结合,同时使用检索增强生成(Retrieval Augmented Generation &#…...

虚拟电厂发展三大趋势:市场化、技术主导、车网互联

市场化:从政策驱动到多元盈利 政策全面赋能 2025年4月,国家发改委、能源局发布《关于加快推进虚拟电厂发展的指导意见》,首次明确虚拟电厂为“独立市场主体”,提出硬性目标:2027年全国调节能力≥2000万千瓦&#xff0…...

NPOI Excel用OLE对象的形式插入文件附件以及插入图片

static void Main(string[] args) {XlsWithObjData();Console.WriteLine("输出完成"); }static void XlsWithObjData() {// 创建工作簿和单元格,只有HSSFWorkbook,XSSFWorkbook不可以HSSFWorkbook workbook new HSSFWorkbook();HSSFSheet sheet (HSSFSheet)workboo…...

PHP 8.5 即将发布:管道操作符、强力调试

前不久,PHP宣布了即将在 2025 年 11 月 20 日 正式发布的 PHP 8.5!作为 PHP 语言的又一次重要迭代,PHP 8.5 承诺带来一系列旨在提升代码可读性、健壮性以及开发者效率的改进。而更令人兴奋的是,借助强大的本地开发环境 ServBay&am…...

Chromium 136 编译指南 Windows篇:depot_tools 配置与源码获取(二)

引言 工欲善其事,必先利其器。在完成了 Visual Studio 2022 和 Windows SDK 的安装后,我们即将接触到 Chromium 开发生态中最核心的工具——depot_tools。这个由 Google 精心打造的工具集,就像是连接开发者与 Chromium 庞大代码库的智能桥梁…...