什么是依賴倒置原則
- 高層模塊不應(yīng)該依賴底層模塊,兩者都應(yīng)該依賴器抽象贩挣。
- 抽象不應(yīng)該依賴細(xì)節(jié)喉前,細(xì)節(jié)應(yīng)該依賴抽象。
個(gè)人理解王财,高層模塊和抽象對(duì)應(yīng)Java里面卵迂,應(yīng)該是抽象類、接口绒净,而底層模塊和細(xì)節(jié)對(duì)應(yīng)Java里面见咒,應(yīng)該就是具體的實(shí)現(xiàn)類,放在咱們開(kāi)發(fā)中怎么理解他們之間的依賴關(guān)系呢挂疆?假如你需要完成一個(gè)功能改览,但是這個(gè)功能,不能自己一個(gè)類就能完成的缤言,需要其他的類宝当,那么這個(gè)時(shí)候就需要用到其他的類,那么你依賴的這個(gè)類胆萧,最好依賴他的父類或者接口今妄。
舉個(gè)例子
小王由于想玩一些大型的3D游戲,但是由于目前自己電腦配置太低了鸳碧,于是想到去升級(jí)自己的電腦,于是他升級(jí)的配件有CPU犬性、顯卡瞻离、內(nèi)存條、硬盤乒裆,咱們就以升級(jí)內(nèi)存條為例套利,目前市場(chǎng)上內(nèi)存條代次有DDR、DDR2鹤耍、DDR3肉迫、DDR4,小王肯定要想看看自己電腦主板支持什么樣的代詞稿黄,然后去市場(chǎng)選購(gòu)喊衫,這個(gè)時(shí)候他發(fā)現(xiàn)自己需要的DDR3代次的內(nèi)存條,有不同的廠商產(chǎn)品杆怕,那么他只要根據(jù)自己需要的代次族购,選購(gòu)就行了壳贪,根本不需要區(qū)分廠商。那么為什么不同廠商生產(chǎn)的內(nèi)存的都可以使用呢寝杖?哈哈违施,這個(gè)就是依賴倒置原則,每個(gè)廠商都遵守不同代次的標(biāo)準(zhǔn)瑟幕,就行了磕蒲。所以小王只需要關(guān)心內(nèi)存條的代次就行了,符合自己需要的代次的內(nèi)存條都是可以使用的只盹,壓根不需要關(guān)心什么廠商生產(chǎn)的辣往。
代碼中如何依賴
- 構(gòu)造函數(shù)傳遞依賴對(duì)象。
- Setter方法傳遞依賴的對(duì)象鹿霸。
- 接口生命依賴的對(duì)象排吴,簡(jiǎn)稱接口注入。
代碼具體實(shí)踐
- 每個(gè)類盡量都有接口和抽象類懦鼠,或者都擁有钻哩。
- 接口的表面類型盡量是接口或者是抽象類。
盡量根據(jù)具體的業(yè)務(wù)來(lái)進(jìn)行相關(guān)的處理肛冶,規(guī)則是死的街氢,業(yè)務(wù)是活的,就像JavaBean睦袖,不見(jiàn)得非要搞接口和抽象類繼承下吧珊肃。 - 任何類都不應(yīng)該從具體了派生。
如果出現(xiàn)的這種情況馅笙,可以看看具體的業(yè)務(wù)伦乔,將兩者提取一個(gè)抽象類或者接口,然后兩者在進(jìn)行繼承董习。 - 盡量不要覆寫父類已經(jīng)實(shí)現(xiàn)的方法烈和。
- 結(jié)合里斯替換原則進(jìn)行使用。