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

依賴倒置

系統 2381 0

Dependence Inversion Principle ”依賴倒置原則

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

抽象不應當依賴于細節;細節應當依賴于抽象;

要針對接口編程,不針對實現編程。

優點: 使用傳統過程化程序設計所創建的依賴關系,策略依賴于細節,這是糟糕的,因為策略受到細節改變的影響。依賴倒置原則使細節和策略都依賴于抽象,抽象的穩定性決定了系統的穩定性。

怎樣做到依賴倒置?

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

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

層次化:所有結構良好的面向對象構架都具有清晰的層次定義,每個層次通過一個定義良好的、受控的接口向外提供一組內聚的服務。

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

1 、任何變量都不應該持有一個指向具體類的指針或者引用。

2 、任何類都不應該從具體類派生。

3 、任何方法都不應該覆寫它的任何基類中的已經實現的方法。

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

首先假設有一個需求,類Business需要調用類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();
????}
}

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

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

?

依賴倒置


更多文章、技術交流、商務合作、聯系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯系: 360901061

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

【本文對您有幫助就好】

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

發表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 免费播放欧美毛片 | 成熟的女性强烈交性视频 | 男女污污视频在线观看 | 精品国产一区二区三区四区色 | 一级黄视频 | 日韩免费高清一级毛片在线 | 亚洲欧美日韩国产精品一区 | 久久精品综合国产二区 | 深夜看片在线观看18 | 欧美在线视频7777kkkk | 精品乱人伦一区二区三区 | 中国精品久久 | 四虎影院最新地址 | 看黄a大片 免费 | 在线色综合 | 亚洲国产天堂久久综合 | 中文字幕亚洲高清综合 | 福利视频在线观看午夜 | 亚洲综合一 | 亚洲第成色999久久网站 | 狠狠色噜噜狠狠狠狠888奇米 | 亚洲专区中文字幕 | 久久精品人人做人人爱爱 | 黄色在线视频网站 | 一级毛片看真人在线视频 | 免费精品视频 | 日韩亚洲一区二区三区 | 欧美国产永久免费看片 | 狠狠狠色丁香婷婷综合久久五月 | 欧美劲爆第一页 | 99在线精品日韩一区免费国产 | 亚洲欧洲日产国码二区首页 | 拍拍拍精品视频在线观看 | 亚洲va天堂va欧美ⅴa | 99精品国产费观看视频 | 欧美国产精品日韩在线 | 亚洲国产99在线精品一区二区 | 国产欧美日韩精品高清二区综合区 | 亚洲国产精品一区二区久久hs | 国产精品.com | 经典国产乱子伦精品视频 |