亚洲免费在线-亚洲免费在线播放-亚洲免费在线观看-亚洲免费在线观看视频-亚洲免费在线看-亚洲免费在线视频

依賴倒置

系統(tǒng) 2084 0

Dependence Inversion Principle ”依賴倒置原則

說明: 要依賴于抽象,不要依賴于具體。客戶端依賴于抽象耦合。

抽象不應(yīng)當(dāng)依賴于細(xì)節(jié);細(xì)節(jié)應(yīng)當(dāng)依賴于抽象;

要針對接口編程,不針對實(shí)現(xiàn)編程。

優(yōu)點(diǎn): 使用傳統(tǒng)過程化程序設(shè)計(jì)所創(chuàng)建的依賴關(guān)系,策略依賴于細(xì)節(jié),這是糟糕的,因?yàn)椴呗允艿郊?xì)節(jié)改變的影響。依賴倒置原則使細(xì)節(jié)和策略都依賴于抽象,抽象的穩(wěn)定性決定了系統(tǒng)的穩(wěn)定性。

怎樣做到依賴倒置?

以抽象方式耦合是依賴倒轉(zhuǎn)原則的關(guān)鍵。抽象耦合關(guān)系總要涉及具體類從抽象類繼承,并且需要保證在任何引用到基類的地方都可以改換成其子類,因此,里氏代換原則是依賴倒轉(zhuǎn)原則的基礎(chǔ)。

在抽象層次上的耦合雖然有靈活性,但也帶來了額外的復(fù)雜性,如果一個(gè)具體類發(fā)生變化的可能性非常小,那么抽象耦合能發(fā)揮的好處便十分有限,這時(shí)可以用具體耦合反而會(huì)更好。

層次化:所有結(jié)構(gòu)良好的面向?qū)ο髽?gòu)架都具有清晰的層次定義,每個(gè)層次通過一個(gè)定義良好的、受控的接口向外提供一組內(nèi)聚的服務(wù)。

依賴于抽象:建議不依賴于具體類,即程序中所有的依賴關(guān)系都應(yīng)該終止于抽象類或者接口。盡量做到:

1 、任何變量都不應(yīng)該持有一個(gè)指向具體類的指針或者引用。

2 、任何類都不應(yīng)該從具體類派生。

3 、任何方法都不應(yīng)該覆寫它的任何基類中的已經(jīng)實(shí)現(xiàn)的方法。

上面所敘述的只是一些理論性的東西,下面舉個(gè)例子或許能更好地說明問題,

首先假設(shè)有一個(gè)需求,類Business需要調(diào)用類Dependency的方法f(),按照日常的做法,得到下面的代碼:

//**類Dependency**
public class Dependency {
????public void f() {};
}
//**類Business**
public??class Business {
????Dependency d;
????public Business() {
????d = new Dependency();
????}
????public void doSth() {
????????d.f();
????}
}

對上述實(shí)現(xiàn)做出如下修改:
????首先,將Business里的Dependency實(shí)例的獲得該為setter方式,其次,將Dependency類改為某個(gè)接口的實(shí)現(xiàn)。故可以得到下面新的代碼:
//**接口IDependency**
public interface IDependency {
????void f();
}
//**類Dependency**
public class Dependency {
????public void f() {};
}
//**類Business**
public??class Business {
????IDependency d;????????????//如果在構(gòu)造函數(shù)里new一個(gè)具體的類的話,那么這段代碼還是不能復(fù)用,一些書上在這個(gè)類中的某個(gè)函數(shù)中new一個(gè)具體的類,當(dāng)然
????public Business() {}??????//在具體類發(fā)生變化的時(shí)候,這段代碼還得改,還是不能復(fù)用,高層還是依賴于具體,所以對讀者是一種誤解。所以應(yīng)該采取依賴注
????public void doSth() {?????//的方法,讓外界來決定什么時(shí)候來傳入一個(gè)具體的類,這就是好萊蕪原則,只要具體類實(shí)現(xiàn)了某個(gè)穩(wěn)定的接口,那么這個(gè)類
???? d.f();???????????????????//Business就能在以后的開發(fā)中得到復(fù)用,所以不只是繼承才能復(fù)用,繼承只是比較狹隘的復(fù)用,面向?qū)ο蟮膹?fù)用強(qiáng)調(diào)的是邏輯的
????}?????????????????????????//復(fù)用,只有這樣才能在開發(fā)中節(jié)省大量的人力。所以依賴倒置應(yīng)該于依賴注入聯(lián)系起來,不能分離使用(個(gè)人看法)。
????public void setDependency(IDependency d) {
????????this.d = d;
????}
}

在新的代碼中,首先Business的變量d可以接收任何IDependency的實(shí)例,另外,Dependency的實(shí)例不是通過Business來獲得,而是通過setter(也可以用構(gòu)造器)來由外部傳給它。這似乎跟我們往常的代碼沒什么不同,但這已經(jīng)是一個(gè)良好的設(shè)計(jì)。

?

依賴倒置


更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯(lián)系: 360901061

您的支持是博主寫作最大的動(dòng)力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點(diǎn)擊下面給點(diǎn)支持吧,站長非常感激您!手機(jī)微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點(diǎn)擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動(dòng)力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會(huì)非常 感謝您的哦!!!

發(fā)表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 国产福利在线免费 | 黄色自拍网站 | 久久天天躁狠狠躁夜夜 | 亚洲夜色综合久久 | 日本3p视频在线看高清 | 国产成人综合网在线观看 | 四虎国产精品影库永久免费 | 青娱乐久久 | 精品视频一区二区三区在线播放 | 国产一区二区三区免费视频 | 国产成人mv在线观看入口视频 | 九九色网站 | 亚洲欧美国产高清va在线播放 | 天天久久 | 99久久精品国产免看国产一区 | 99精选视频| 久久婷婷丁香七月色综合 | 久久国产乱子伦精品免 | 国产精品免费久久久久影院小说 | 理论片 我不卡影院 | 久久精品国产2020观看福利色 | 亚洲国产精品乱码在线观看97 | 亚洲欧美综合人成野草 | 日日影院 | 久久久久影视 | 免费视频精品一区二区三区 | 91在线丨亚洲 | 在线一区播放 | 黄色一级网 | 毛片网页 | 欧美精品午夜毛片免费看 | 亚洲最大激情中文字幕 | 午夜精品在线免费观看 | 狠久久| 日韩欧美h | 2021久久伊人精品中文字幕有 | 久久成人亚洲香蕉草草 | 欧美精品a毛片免费观看 | 99久久精品国产亚洲 | 久久只有这里有精品 | 日韩经典欧美一区二区三区 |