2 回答

TA貢獻(xiàn)1744條經(jīng)驗(yàn) 獲得超4個(gè)贊
首先,接口的存在是為了實(shí)現(xiàn)其中描述的所有非默認(rèn)方法。這可以很容易地被抽象類取代。但是,為了以更簡單的方式進(jìn)行清理,已經(jīng)實(shí)現(xiàn)了接口。
只要它看起來合乎邏輯并且對您來說更容易使用界面,就沒有太多界面這樣的東西。但是,一旦您或您的同事為獲取圖片而頭疼,那就太多了。
使用接口作為一種額外的方式來簡化清理和結(jié)構(gòu)化流程。
此外,java 不支持類的多重繼承。因此,通過使用接口,您可以像在示例中那樣進(jìn)行多重繼承。
真的很好,祝你面試好運(yùn)!

TA貢獻(xiàn)1824條經(jīng)驗(yàn) 獲得超5個(gè)贊
我會盡力不可知地回答你的問題。
1.
將盡可能多的功能抽象到接口中是一種好習(xí)慣嗎?讓我們從基礎(chǔ)開始 a) 記住接口只不過是“合同”,實(shí)現(xiàn)接口的參與者基本上承諾兌現(xiàn)和交付合同條款和條件的承諾。b) 接口在代碼中充當(dāng)優(yōu)秀的設(shè)計(jì)工具,本質(zhì)上允許生產(chǎn)者和參與者專注于他們的高級交互,而不用擔(dān)心實(shí)現(xiàn)細(xì)節(jié)。
在 CS 基礎(chǔ)外行人的術(shù)語中,接口承諾一致性,本質(zhì)上是 3 件事。1. 承諾所述功能/操作/功能/方法可用 2. 此功能接受所述約定輸入 3.(如果實(shí)施)此功能將產(chǎn)生所述結(jié)果。
因此,當(dāng)一項(xiàng)服務(wù)(類/soap 消息等)提供實(shí)現(xiàn)接口的意圖時(shí),它公開同意“合同”的這 3 個(gè)條款,任何偏離它們的行為都違反了合同。
2.
是的,你是絕對正確的,當(dāng)談到SOLID 設(shè)計(jì)原則中的 Ioc(控制反轉(zhuǎn))時(shí),接口確實(shí)展示了它們的力量,它允許 IoC 容器解決(提供)并服務(wù)于遵守合同的合適參與者(實(shí)現(xiàn)),通常在運(yùn)行時(shí),因此使系統(tǒng)開發(fā)人員不必?fù)?dān)心實(shí)現(xiàn)細(xì)節(jié)。
但也許 Ioc 的好處通常只有在實(shí)現(xiàn)服務(wù)定位器模式時(shí)才能實(shí)現(xiàn),因此,“開發(fā)人員或團(tuán)隊(duì)如何從使用接口作為設(shè)計(jì)工具中受益?” 成為一個(gè)重要的問題。
單一開發(fā)者 舉個(gè)例子,我正忙著寫一個(gè)新的軟件系統(tǒng),白天,我全神貫注于我想為我的用戶提供的那種功能,也許能夠在一般意義上管理他們的待辦事項(xiàng)列表,這需要能夠“創(chuàng)建”新的待辦事項(xiàng)、“清除”現(xiàn)有項(xiàng)目以及從待辦集合中“刪除”項(xiàng)目。現(xiàn)在有幾種方法可以實(shí)現(xiàn)這些功能中的每一個(gè),我變得懶惰了,我寧愿在下周只交付其中一個(gè)功能,但我可能會忘記我最初的想法并最終實(shí)現(xiàn)我自己基于的功能隨著時(shí)間的推移對我的影響,自律并堅(jiān)持我最初的想法,我寧愿在沒有實(shí)際實(shí)現(xiàn)的情況下預(yù)先起草這個(gè)功能的合同,這將允許我模擬這些功能而不是實(shí)際實(shí)現(xiàn)它們。因此,通過使用接口,我已經(jīng)為接下來幾周需要實(shí)現(xiàn)的目標(biāo)奠定了基礎(chǔ),并且我可以每隔一天回到它并完成我的功能而不會違背我的承諾......這將我們帶到下一個(gè)主題我現(xiàn)在不會深入研究Open Close 原則(SOLID 中的 O)基本上說我的設(shè)計(jì)對外部變化是封閉的,但對內(nèi)部變化是開放的,也許是對擴(kuò)展(添加)開放的事件。所以我可以在不破壞現(xiàn)有合同的情況下向我的 todo 服務(wù)添加新功能,我可以更改它們的實(shí)現(xiàn)行為但不能更改現(xiàn)有功能的形狀。
在一個(gè)團(tuán)隊(duì)中 我與 Lindile 和 Selebalo 合作實(shí)施虛擬卡系統(tǒng),由于工作量太大,我們決定我將專注于核心銀行系統(tǒng)(余額分類賬),Lindile 將專注于 VC 的存款,而 Selebalo 專注于VC的存款。在我們的初始設(shè)計(jì)會議中,我們從核心銀行開始從內(nèi)到外進(jìn)行設(shè)計(jì),并描述哪些操作可用于更新客戶的賬戶,經(jīng)過幾個(gè)小時(shí)的討論,我們決定核心銀行系統(tǒng)將提供兩種功能,一種用于添加將錢存入一個(gè)帳戶,稱為“貸方”,接受金額,“借方”,扣除或減少也接受金額的客戶帳戶。但是因?yàn)楹诵谋仨毺幚砗芏嗥渌虑椋蛻粜庞脵n案、反洗錢、
public interface ICoreBankingServices{
Balance Debit(decimal amount,Currency c);
Balance Credit(decimal amount, Currency c);
}
現(xiàn)在 Lindile 和 Selebalo 可以假設(shè)我將履行合同并選擇模擬或模擬借方和貸方的結(jié)果,直到我們都準(zhǔn)備好集成和測試,因此我的功能不依賴于他們的工作和這是一件積極的事情。
我希望這些示例描繪了使用接口、設(shè)計(jì)工具和依賴解耦機(jī)制的一些基本好處。
我不是 Java 的期望,但如果游戲角色必須戰(zhàn)斗、吃飯和移動(dòng),那么你就在正確的軌道上。您只需要注意您所做的解耦級別(與規(guī)范化相同),但會增加復(fù)雜性,但沒有任何指導(dǎo)方針,只要事情不會變得太復(fù)雜,您可以用在邏輯上盡可能多的接口......只是在多重實(shí)現(xiàn)繼承方面不要應(yīng)用相同的想法,但這是個(gè)人意見:)
您最終將不得不繳納稅款并更多地了解設(shè)計(jì)模式以及它們試圖解決或簡化的問題,以便加深對設(shè)計(jì)更好系統(tǒng)的理解。
添加回答
舉報(bào)