面向接口编程思想(面向对象思想)

面向接口编程思想(面向对象思想)看到一篇讲解生动有趣的博客 nbsp 拿来分享一下原文链接如下 面向接口编程 nbsp nbsp 开启故事之旅 面向接口编程思想 有一天 我想盖个房子 当然我自己是肯定盖不起来的 我要找村东头的强壮搬砖大哥 村南头的技术娴熟的砌墙师傅 村北头的水泥大哥和邻村的贴瓷砖师傅等 我的计划是这样的 先找人 找到村东头的搬砖大哥 找到村南头的砌墙师傅 找到村西头的水泥大哥 找到邻村里

看到一篇讲解生动有趣的博客  拿来分享一下

原文链接如下: 面向接口编程

 

 

开启故事之旅:

面向接口编程思想:

有一天,我想盖个房子,当然我自己是肯定盖不起来的,我要找村东头的强壮搬砖大哥,村南头的技术娴熟的砌墙师傅,村北头的水泥大哥和邻村的贴瓷砖师傅等。

我的计划是这样的:

先找人。

找到村东头的搬砖大哥,

找到村南头的砌墙师傅,

找到村西头的水泥大哥,

找到邻村里的瓷砖师傅,

然后,开工~

只要房子没盖好,就执行下面的步骤:

搬砖大哥去搬砖,

水泥大哥和水泥,

砌墙师傅来砌墙,

瓷砖师傅贴瓷砖。

 

而我,肯定被叫去装系统了,朴实的村民都知道程序员肯定会修电脑了!【哭】

 

翻译成java语言,就是以下代码:

public static void main(String args[]) { //我要盖房字了! //那么,我要先找人了~ 村东头搬砖大哥 banZhuan = new 村东头搬砖大哥(); 村南头砌墙师傅 qiQiang = new 村南头砌墙师傅(); 村西头水泥大哥 shuiNi = new 村西头水泥大哥(); 邻村贴瓷砖师傅 ciZhuan = new 邻村贴瓷砖师傅(); //人找完了,开工~ while( 房子没盖好 ) { banZhuan.搬砖(); shuiNi.和水泥(); qiQiang.砌墙(); ciZhuan.贴瓷砖(); } System.out.println("房子盖好了,收工"); }

 

 

第二天,开工~ 但是一直到中午12点,搬砖大哥都没来,而我去给二姑装系统去了,我还以为他们已经快把房子建好了呢,于是,,,,第一天就浪费了一天的时间。后来才知道他昨晚撸串吃坏了肚子,真是,,,,,,不怕胖吗???

相应的,在我们的代码中,banZhuan这个对象有bug,我们就不能用这个对象了。

这就是传统工作方式的弊端,一个工程里任何一部分出了问题,整个工程的进度都会受阻。即使世界上有很多搬砖大哥,但是我的计划是让村东头的搬砖大哥来,这是我和搬砖大哥约定好的,不能换人。(“不能换人”,这是非面向接口的弊端,建议看完这个例子后,仔细想想“换人”这个词)

几经周折,我的小房子终究还是盖起来了,但是我感觉整个人都不好了。

于是第二次我盖房子的时候(没错我又要盖房子了,因为我是土豪,真的),我在村东头歪脖树下贴了一张招聘广告,(由于村东头是我们村业余时间的聚集地,所以,大部分人都能看到这个广告),上面是这样的:

ladies and 相亲们,我要盖一个房子,现在需要以下人手:搬砖师傅,水泥师傅,砌墙师傅,瓷砖师傅各一位。有意者明天早上到我家门口报道,不用面试,能到就录取!工资500元/天,日结,报销上下班打车费(没错,我们村有texi,而且我是如此的任性)。

于是翻译成java就是这样:

public static void main(String args[]) { //我又要盖房子了! //找人~ 广告 guangGao=new 广告(); 搬砖大哥 banZhuan=guangGao.getBanZhuan(); 水泥大哥 shuiNi=guangGao.getShuiNi(); 砌墙师傅 qiQiang=guangGao.getQiQiang(); 瓷砖师傅 ciZhuan=guangGao.getCiZhuan(); //开工 while(房子没盖好) { banZhuan.搬砖(); shuiNi.和水泥(); qiQaing.砌墙(); cizhuan.贴瓷砖(); } System.out.println("房子又盖好了!"); }

这次,房子很快就改盖好了,在我看来这个过程是如此顺利。那么我们来分析一下,为什么这次我们的工作是如此的顺利?

和上次不同的是,我们这次找人的时候,并没有指名道姓要哪位师傅来,也就是没指名要村南头的砌墙师傅,而只说要一个会砌墙的师傅,这样,世界上所有会砌墙的时候都可以加入我们盖房子的队伍,这样,不管是谁又撸串吃坏了肚子都不会对我们的工程造成任何影响,因为我们的工程相比以前的工程要灵活很多,我们可以随意换人。还有一个小插曲,虽然在我看来整个过程是如此顺利,但是我不知道的是,村东头的搬砖大哥本来也想来应聘来着,但是他前一天晚上又撸串吃坏了肚子。但是我关心吗?I DON’T CARE。

 

搬砖大哥、砌墙师傅都是接口,他们可以是村东头的搬砖大哥,也可以是村南头的搬砖大哥,也可以是邻村的搬砖大哥,也可以是美国的搬砖大哥。这邻村的搬砖大哥和美国的搬砖大哥都是“搬砖大哥”这个接口的实现类。

 

什么是接口?

最后分享一下我对“接口”的理解,顺便解释一下“接口”为什么叫“接口”,这样会更好理解面向接口编程。接口,其实是从计算机硬件术语里借鉴来的。你可以看看电脑机箱的后面(或者笔记本的侧面),有很多插线的口,这些口就是“接口”,接线口嘛,这个很好理解吧,这些接口能干什么?可以插鼠标、键盘、摄像头、显示器……那为什么在造电脑的时候不把鼠标键盘什么的直接用电烙铁焊死在机箱里?接口各种各样,造接口也要成本啊,没有接口不就节约了成本吗?而且很多插口都是小白们不知道该插什么。当然这个问题大家都知道,方便换嘛。鼠标坏了,拔下来,把室友的拿过来插在自己的电脑上,又好用了~所以接口是干什么的,是“模块”间接头的地方,双方都不必知道对方是怎样的,机箱不知道接口那边的鼠标是雷蛇还是雷柏,鼠标也不知道接口那边是个台式机还是笔记本。

也就是说,电脑本身并不依赖某个品牌某个型号的鼠标,只要有插头差到机箱上就能用,也就是说电脑依赖的是插口,也就是接口。

记得在智能机还没登上历史舞台,各种山寨“音乐手机”可谓是喧嚣一时,声音大,屏幕大,内存大,还能上,还有浏览器,关键是还便宜!那么这种手机为什么在很短的时间红极一时,又突然退出了历史的舞台?如果你拆开过这种手机,你会发现,除了电池,其他地方的零件都是焊死的,不能更换,如果手机有点小毛病,基本上就可以丢了,即使可以换,也要花好大的力气,但是更重要的是,虽然他有,有浏览器,但是这个和浏览器是“定制的”,不能升级,更不能安装其他的软件。假如一个手机,出场的软件不可以卸载,不可以更新,也不能安装新软件,那,,,,,你想用吗?

另一方面,你可能会说是技术的进步,淘汰了那批山寨手机,但是现在的功能手机(只能打电话发短信的那种,我现在就有一个,应急用)也能在市场上占有一定的份额,怎么没被淘汰呢?

 

面向接口的核心思想就是,可更换。也就是解耦。

另一篇比较经典的面向接口编程思想的解答      解读面向接口编程的思想

 

面向对象的思想:

关于数据结构和面向对象

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/224899.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月17日 上午10:53
下一篇 2026年3月17日 上午10:53


相关推荐

  • mysql修改表名

    mysql修改表名ALTER TABLE table_nameRENAMETOnew_table_name

    2022年6月1日
    30
  • 同相加法器电路图_反相加法器电路图_运放加法器电路图解析

    同相加法器电路图_反相加法器电路图_运放加法器电路图解析lhl 来源 网络整理 2017 08 1610 21 次阅读 0 个评论 在电子学中 加法器是一种数位电路 其可进行数字的加法计算 加法器是产生数的和的装置 加数和被加数为输入 和数与进位为输出的装置为半加器 若加数 被加数与低位的进位数为输入 而和数与进位为输出则为全加器 常用作计算机算术逻辑部件 执行逻辑操作 移位与指令调用 同相加法器输入阻抗高 输出阻抗低反相加法器输入阻抗低 输出阻抗高 当选用同相加法器时 如 A 输入信号时 因为是同相加法器 输入阻抗高

    2026年3月19日
    1
  • CPU降温软件测试自学,CPU降温软件真的有用吗工作原理是什么

    CPU降温软件测试自学,CPU降温软件真的有用吗工作原理是什么CPU 温度是一个很重要参数 我们都会采取物理和软件等方法对 CPU 降温 不过也有网友怀疑了 这些软件真的能让 CPU 降温吗 具体情况一起看看 CPU 降温软件真的有用吗如果要让 CPU 在不需要使用的时候休息 那么就得设计并安装一套 CPU 控制软件在操作系统中 并让它取得最优先的权限 接下来它需要不断地监视 CPU 的外来指令 也就是呼叫 CPU 工作 如果没有 那么它会呼叫一个 HLT 指令 此项指令就是使 CPU 进入

    2026年3月26日
    2
  • Oracle 异常详解(exception)

    Oracle 异常详解(exception)Oracle异常详解(exception)来源:(33条消息)Oracle异常详解(exception)_鱼丸丶粗面-CSDN博客鱼丸丶粗面2018-10-0823:03:232949

    2022年7月2日
    32
  • cmd进入mysql的方法

    cmd进入mysql的方法1.cmd下找到mysql的安装目录下的bin文件夹(可以直接在windows的bin文件夹下敲入cmd回车) 例如:E:\ProgramFiles(x86)\Wamp\bin\mysql\mysql5.5.202.运行mysql.exe或者mysql-hlocalhost-uroot-p3.输入root用户密码

    2022年6月8日
    37
  • 动态规划C++实现–最长递增子序列

    动态规划C++实现–最长递增子序列题目:给定数组arr,返回arr的最长递增子序列。举例:arr=[2,1,5,3,6,4,8,9,7],返回的最长递增子序列为[1,3,4,8,9]要求:如果arr长度为N,请实现时间复杂度为O(NlogN)的方法。一、先介绍时间复杂度O(N^2)的方法,具体过程如下:1.生成长度为N的数组dp,dp[i]表示在以arr[i]这个数结尾的情况下,arr[0…

    2022年6月7日
    62

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号