在閱讀本文之前,您需要對(duì)面向?qū)ο?/a>思想以及接口有一個(gè)較為清楚的認(rèn)識(shí)!
Tips:
此篇文章著重講述面向接口編程的代碼搭建方式,至于原理以及一些基礎(chǔ)知識(shí)可以參照這篇文章:面向接口編程思想基礎(chǔ)
那么,讓我們開始吧~
假設(shè)您準(zhǔn)備研發(fā)一個(gè)moba類游戲(類似英雄聯(lián)盟或者王者榮耀)。每個(gè)人物都必須包含兩個(gè)字段:名字和人物類型,兩個(gè)方法:介紹自己的性格和釋放技能。
為了體現(xiàn)面向?qū)ο笏枷?,我們需要做的第一步?yīng)該是為每個(gè)人物都設(shè)計(jì)一個(gè)獨(dú)立的類,代碼如下:


有了這兩個(gè)類我們就可以叫人物模擬一些場(chǎng)景啦,比如叫他們自我介紹.
于是你可能會(huì)寫出以下代碼和運(yùn)行結(jié)果:

嗯。。??雌饋硭坪鯖]什么問題。
但如果我先有了第三個(gè)人物,那該怎么辦呢?
除了重新寫個(gè)人物類以外,還得在main方法里面重新實(shí)例化以及調(diào)用一次。
但是LOL可以是一百多個(gè)英雄!如果全部都要做自我介紹的話豈不是得在main方法里面實(shí)例化以及調(diào)用一百次?
于是我們可以開始考慮使用接口了。
至于好處我先不說,先看代碼。
因?yàn)槊總€(gè)英雄都包含了固有的兩個(gè)字段和兩個(gè)方法,所以我們可以寫個(gè)接口來限定它。

然后我們的每個(gè)英雄類都去繼承這個(gè)接口


核心代碼警告
再來個(gè)自我介紹的方法:

于是乎,我們的main方法就被簡(jiǎn)化成了這樣:

兩種方式的差異就顯而易見了吧。
在使用了面向接口的編程方式后,我們?nèi)绻略鲆粋€(gè)任務(wù),就只需要寫個(gè)人物的類來繼承我們的IHeros接口,然后在Main里面調(diào)用一下。不管以后需要新增多少個(gè)人物,都是一樣的簡(jiǎn)單。
但是使用第一種方式的話,我們就需要在Main寫非常多的冗余代碼。
而且萬一以后我們需要給英雄們新增加一個(gè)方法(比如跳一段舞)的話,我們就需要手動(dòng)去修改所有的英雄類,英雄類多了之后難免會(huì)漏掉那么百分之一二,更恐怖的是我們需要挨個(gè)修改main方法里面的邏輯。
而面向接口的編程方式很好地解決了這個(gè)問題。
如果我們現(xiàn)在又一百個(gè)英雄都需要新增跳舞的方法。我只需要在IHeros接口里新增一個(gè)跳舞的方法:

然后我所有的英雄類都會(huì)報(bào)這個(gè)錯(cuò)誤:

這樣可以完美地防止在修改英雄類的時(shí)候會(huì)漏掉。
而且我只需要修改一下ShowMyself里面的ShowHero()方法就完事兒。甚至都不需要修改Main方法!