面向接口编程(或者面向抽象编程)的一个例子。

当然你得先知道面向对象是什么

 

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

我的计划是这样的:

先找人。

找到村东头的搬砖大哥,

找到村南头的砌墙师傅,

找到村西头的水泥大哥,

找到邻村里的瓷砖师傅,

然后,开工~

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

搬砖大哥去搬砖,

水泥大哥和水泥,

砌墙师傅来砌墙,

瓷砖师傅贴瓷砖。

 

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

 

翻译成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("房子又盖好了!");
}

 

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

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

 

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

 

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

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

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

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

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

 

发布了44 篇原创文章 · 获赞 25 · 访问量 2万+

猜你喜欢

转载自blog.csdn.net/csdn372301467/article/details/77498854