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

news2024/12/23 2:01:39

目录

一:背景介绍

二:思路&方案

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("正在开门中。。。。。。。。。。。 门开了");
    }
}

结果

四:总结

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

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

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

相关文章

k8s 部署 skywalking 并持久化到es

1、k8s中安装部署 skywalking skywalking集群情况下需要保证用同一数据源,这里我们存储方式改为es 1.1 部署elasticsearch docker run -it -d -p 9200:9200 -p 9300:9300 -e ES_JAVA_OPTS"-Xms256m -Xmx256m" -e "discovery.typesingle-node"…

DSRC技术

DSRC(Dedicated Short Range Communication)专用短程通信 定位 是V2X领域存在的两大通信技术之一(另一个为LTE-V2X)。 所属技术路线 与这两大技术相对应,是V2X无线通信技术的两大技术路线: IEEE 802.11p 本是04年指定的一个通…

一文入门HTML+CSS+JS(样例后续更新)

一文入门HTMLCSSJS(样例后续更新)前言HTML,CSS和JS的关系HTMLhead元素titlelinkmetabody元素设置网页正文颜色与背景颜色添加网页背景图片设置网页链接文字颜色设置网页边框文字与段落标记普通文字的输入对文字字体的设置 font使用文字的修饰…

代码随想录刷题-数组总结篇

文章目录数组二分查找原理习题题目1思路和代码题目-2移除元素习题我的想法暴力解法双指针有序数组的平方习题暴力排序双指针长度最小的子数组习题暴力解法滑动窗口螺旋矩阵 II习题我的解法别人的解法总结数组 二分查找 本节对应代码随想录中:代码随想录-二分查找 …

java教程--函数式接口--lambda表达式--方法引用

函数式接口 介绍 jdk8新特性,只有一个抽象方法的接口我们称之为函数接口。 FunctionalInterface ​ JDK的函数式接口都加上了FunctionalInterface 注解进行标识。但是无论是否加上该注解只要接口中只有一个抽象方法,都是函数式接口。 如在Comparato…

Makefile的概述

什么是makemake 是个命令,是个可执行程序,用来解析Makefile文件的命令,这个命令存放在 /usr/binmake概述1.GUN make是一种代码维护工具2.make 工具会根据makefile文件定义的规则和步骤,完成整个软件项目的代码维护工作。3.一般用来…

解决Win10图片/文件右键单击自动退出并刷新桌面问题

问题描述 这两天开始不知道怎么回事儿,右键选择图片时候,电脑黑屏且资源管理器自动重启。然后我就开始找很多方法去解决。 我试了很多种复杂的简单的方法,但是只有一种解决了我的问题。 解决方案【解决我的问题】 这个方法如下&#xff1…

VirtualBox的克隆与复制

快照太多,想整合成1个文件怎么办? 最近,我就遇到一个问题。快照太多了。比较占用空间怎么办? 错误做法 一开始,我是这么操作的,选中某个快照,然后选择删除…然后我登录虚拟机后,发…

为什么程序员喜欢这些键盘?

文章目录程序员的爱介绍个人体验程序员的爱 程序员是长时间使用计算机的群体,他们需要一款高品质的键盘来保证舒适的打字体验和提高工作效率。在键盘市场上,有很多不同类型的键盘,但是对于程序员来说,机械键盘是他们最钟爱的选择…

原来CSS 也可以节流啊

Ⅰ、前言 「节流」 是为了减少请求的触发频率,不让用户点的太快,达到节省资源的目的 ;通常 我们采用 JS 的 定时器 setTimeout ,来控制点击多少秒才能在触发;其实 通过 CSS 也能达到 「节流」 的目的,下面…

LeetCode598. 范围求和 II(python)

题目 给你一个 m x n 的矩阵 M &#xff0c;初始化时所有的 0 和一个操作数组 op &#xff0c;其中 ops[i] [ai, bi] 意味着当所有的 0 < x < ai 和 0 < y < bi 时&#xff0c; M[x][y] 应该加 1。 提示: 1 < m, n < 4 * 104 0 < ops.length < 104 o…

硅谷银行倒闭的几点启示

摘要&#xff1a;本文从公开资料分析一下硅谷银行对信息科技行业的我们有一些什么启示。硅谷银行“拔网线”了&#xff0c;想创业的您&#xff0c;该注意了。1.硅谷银行是谁我们从其官网的说明来看看。The financial partner of the innovation economy.&#xff08;翻译成中文…

买卖股票的最佳时机 I II III IV

121. 买卖股票的最佳时机 自己的思路&#xff1a;采用求最长连续子串和题目的思路 class Solution {public int maxProfit(int[] prices) {if(prices.length 1) return 0;int[] nums new int[prices.length - 1];for(int i 0;i < prices.length - 1;i){nums[i] prices[…

C++STL详解(六)——stack和queue

文章目录空间适配器stackstack的定义方式stack的使用stack的模拟实现queuequeue的定义方式queue的使用queue的模拟实现空间适配器 适配器是一种设计模式&#xff08;设计模式是一套被反复使用的&#xff0c;多数人知晓的&#xff0c;经过分类编目的&#xff0c;代码设计经验的…

Linux下Docker安装mysql-超详细步骤

安装Docker Engine官方参考文档&#xff1a;https://docs.docker.com/engine/install/centos/若之前有安装docker&#xff0c;需要先卸载之前的dockersudo yum remove docker \docker-client \docker-client-latest \docker-common \docker-latest \docker-latest-logrotate \d…

css实现画面转场以及边框线条动画

效果预览 在实现转场效果之前&#xff0c;需要先了解css的clip-path属性&#xff0c;该属性就是实现转场的核心属性&#xff0c;clip-path属性可以使用裁剪方式创建元素的可显示区域。区域内的部分显示&#xff0c;区域外的隐藏。也就是说裁切的大小不会超过实际的大小&#x…

测牛学堂:接口测试基础理论和工具的使用

接口测试流程总结 1 需求分析&#xff0c;看产品经理的需求文档 2 接口文档解析&#xff0c;开发编写的api接口文档 3 设计测试用例 4脚本开发 5 执行及缺陷跟踪 6 生成测试报告 7接口自动化持续集成 测试解析接口文档 接口文档&#xff0c;又称为api文档&#xff0c;是由后…

SpringCloud-高级篇(二)

目录&#xff1a; &#xff08;1&#xff09;限流规格-流控模式 入门案例&#xff1a;直接模式 关联模式&#xff1a; 链路模式&#xff1a; &#xff08;2&#xff09; 流控效果&#xff1a;warm up 排队等待&#xff1a; &#xff08;3&#xff09;热点参数限流&#xff1…

tar和gzip压缩和解压

打包和压缩的区别&#xff1a;打包&#xff1a;将多文件 封装在一起压缩&#xff1a;将多文件 封装在一起 通过特定的算法 将冗余的数据 进行删除tar默认是打包命令&#xff0c;如果想用tar进行压缩 必须加选项1、gzip格式压缩&#xff1a;tar zcvf 压缩包包名 文件1 文件2 文件…

Java集合进阶(三)

文章目录一、Map1. 概述2. 基本功能3. 遍历4. 遍历学生对象5. 集合嵌套6. 统计字符出现次数二、Collections1. 常用方法2. 学生对象排序三、模拟斗地主一、Map 1. 概述 Interface Map<K, V>&#xff1a;K 是键的类型&#xff0c;V 是值的类型。 将键映射到值的对象&…