C#進(jìn)階之面向接口編程

在閱讀本文之前,您需要對(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方法!

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容