06-設計模式6原則大原則之依賴倒置原則(轉載)

定義:高層模塊不應該依賴低層模塊吼和,二者都應該依賴其抽象擎值;抽象不應該依賴細節(jié);細節(jié)應該依賴抽象鲫忍。問題由來:類A直接依賴類B膏燕,假如要將類A改為依賴類C,則必須通過修改類A的代碼來達成悟民。這種場景下坝辫,類A一般是高層模塊,負責復雜的業(yè)務邏輯射亏;類B和類C是低層模塊近忙,負責基本的原子操作竭业;假如修改類A,會給程序帶來不必要的風險及舍。
解決方案:將類A修改為依賴接口I未辆,類B和類C各自實現(xiàn)接口I,類A通過接口I間接與類B或者類C發(fā)生聯(lián)系锯玛,則會大大降低修改類A的幾率咐柜。
依賴倒置原則基于這樣一個事實:相對于細節(jié)的多變性,抽象的東西要穩(wěn)定的多攘残。以抽象為基礎搭建起來的架構比以細節(jié)為基礎搭建起來的架構要穩(wěn)定的多拙友。在java中,抽象指的是接口或者抽象類歼郭,細節(jié)就是具體的實現(xiàn)類遗契,使用接口或者抽象類的目的是制定好規(guī)范和契約,而不去涉及任何具體的操作病曾,把展現(xiàn)細節(jié)的任務交給他們的實現(xiàn)類去完成牍蜂。
依賴倒置原則的核心思想是面向接口編程,我們依舊用一個例子來說明面向接口編程比相對于面向實現(xiàn)編程好在什么地方泰涂。場景是這樣的捷兰,母親給孩子講故事,只要給她一本書负敏,她就可以照著書給孩子講故事了贡茅。代碼如下:



運行結果:


運行良好,假如有一天其做,需求變成這樣:不是給書而是給一份報紙顶考,讓這位母親講一下報紙上的故事,報紙的代碼如下:

這位母親卻辦不到妖泄,因為她居然不會讀報紙上的故事驹沿,這太荒唐了,只是將書換成報紙蹈胡,居然必須要修改Mother才能讀渊季。假如以后需求換成雜志呢?換成網頁呢罚渐?還要不斷地修改Mother却汉,這顯然不是好的設計。原因就是Mother與Book之間的耦合性太高了荷并,必須降低他們之間的耦合度才行合砂。
我們引入一個抽象的接口IReader。讀物源织,只要是帶字的都屬于讀物:

Mother類與接口IReader發(fā)生依賴關系翩伪,而Book和Newspaper都屬于讀物的范疇微猖,他們各自都去實現(xiàn)IReader接口,這樣就符合依賴倒置原則了缘屹,代碼修改為:




運行結果:

這樣修改后凛剥,無論以后怎樣擴展Client類,都不需要再修改Mother類了轻姿。這只是一個簡單的例子当悔,實際情況中,代表高層模塊的Mother類將負責完成主要的業(yè)務邏輯踢代,一旦需要對它進行修改,引入錯誤的風險極大嗅骄。所以遵循依賴倒置原則可以降低類之間的耦合性胳挎,提高系統(tǒng)的穩(wěn)定性,降低修改程序造成的風險溺森。
采用依賴倒置原則給多人并行開發(fā)帶來了極大的便利慕爬,比如上例中,原本Mother類與Book類直接耦合時屏积,Mother類必須等Book類編碼完成后才可以進行編碼医窿,因為Mother類依賴于Book類。修改后的程序則可以同時開工炊林,互不影響姥卢,因為Mother與Book類一點關系也沒有。參與協(xié)作開發(fā)的人越多渣聚、項目越龐大独榴,采用依賴導致原則的意義就越重大。現(xiàn)在很流行的TDD開發(fā)模式就是依賴倒置原則最成功的應用奕枝。
傳遞依賴關系有三種方式棺榔,以上的例子中使用的方法是接口傳遞,另外還有兩種傳遞方式:構造方法傳遞setter方法傳遞隘道,相信用過Spring框架的症歇,對依賴的傳遞方式一定不會陌生。在實際編程中谭梗,我們一般需要做到如下3點:
低層模塊盡量都要有抽象類或接口忘晤,或者兩者都有。
變量的聲明類型盡量是抽象類或接口激捏。
使用繼承時遵循里氏替換原則德频。

依賴倒置原則的核心就是要我們面向接口編程,理解了面向接口編程缩幸,也就理解了依賴倒置壹置。

轉自:http://blog.csdn.net/zhengzhb/article/details/7289269

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末竞思,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子钞护,更是在濱河造成了極大的恐慌盖喷,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,948評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件难咕,死亡現(xiàn)場離奇詭異课梳,居然都是意外死亡,警方通過查閱死者的電腦和手機余佃,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,371評論 3 385
  • 文/潘曉璐 我一進店門暮刃,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人爆土,你說我怎么就攤上這事椭懊。” “怎么了步势?”我有些...
    開封第一講書人閱讀 157,490評論 0 348
  • 文/不壞的土叔 我叫張陵氧猬,是天一觀的道長。 經常有香客問我坏瘩,道長盅抚,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,521評論 1 284
  • 正文 為了忘掉前任倔矾,我火速辦了婚禮莺琳,結果婚禮上稽坤,老公的妹妹穿的比我還像新娘闽巩。我一直安慰自己尔苦,他們只是感情好,可當我...
    茶點故事閱讀 65,627評論 6 386
  • 文/花漫 我一把揭開白布提陶。 她就那樣靜靜地躺著烫沙,像睡著了一般。 火紅的嫁衣襯著肌膚如雪隙笆。 梳的紋絲不亂的頭發(fā)上锌蓄,一...
    開封第一講書人閱讀 49,842評論 1 290
  • 那天,我揣著相機與錄音撑柔,去河邊找鬼瘸爽。 笑死,一個胖子當著我的面吹牛铅忿,可吹牛的內容都是我干的剪决。 我是一名探鬼主播,決...
    沈念sama閱讀 38,997評論 3 408
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼柑潦!你這毒婦竟也來了享言?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 37,741評論 0 268
  • 序言:老撾萬榮一對情侶失蹤渗鬼,失蹤者是張志新(化名)和其女友劉穎览露,沒想到半個月后,有當地人在樹林里發(fā)現(xiàn)了一具尸體譬胎,經...
    沈念sama閱讀 44,203評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡差牛,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 36,534評論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了堰乔。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片偏化。...
    茶點故事閱讀 38,673評論 1 341
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖镐侯,靈堂內的尸體忽然破棺而出侦讨,到底是詐尸還是另有隱情,我是刑警寧澤析孽,帶...
    沈念sama閱讀 34,339評論 4 330
  • 正文 年R本政府宣布,位于F島的核電站只怎,受9級特大地震影響袜瞬,放射性物質發(fā)生泄漏。R本人自食惡果不足惜身堡,卻給世界環(huán)境...
    茶點故事閱讀 39,955評論 3 313
  • 文/蒙蒙 一邓尤、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧贴谎,春花似錦汞扎、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,770評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至仲翎,卻和暖如春痹扇,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背溯香。 一陣腳步聲響...
    開封第一講書人閱讀 32,000評論 1 266
  • 我被黑心中介騙來泰國打工鲫构, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人玫坛。 一個月前我還...
    沈念sama閱讀 46,394評論 2 360
  • 正文 我出身青樓结笨,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子炕吸,可洞房花燭夜當晚...
    茶點故事閱讀 43,562評論 2 349

推薦閱讀更多精彩內容

  • 程序設計的6大原則: 單一職責原則里氏替換原則依賴倒置原則接口隔離原則迪米特法則開閉原則 從根本學好伐憾,理解為什么要...
    silencefun閱讀 2,403評論 1 4
  • 轉載標注聲明:http://www.uml.org.cn/sjms/201211023.asp 目錄:[設計模式六...
    Bloo_m閱讀 707評論 0 7
  • 設計模式六大原則(1):單一職責原則 定義:不要存在多于一個導致類變更的原因。通俗的說算途,即一個類只負責一項職責塞耕。 ...
    Jabir_Zhang閱讀 643評論 0 3
  • 設計模式六大原則 設計模式六大原則(1):單一職責原則 定義:不要存在多于一個導致類變更的原因。通俗的說嘴瓤,即一個類...
    viva158閱讀 765評論 0 1
  • 想用美好的文字把心中的開心紀錄 10份一定是一個美好的月份 從未想到相戀半年的猴子要成為人妻 一切來的太突然 我立...
    君君的小窩閱讀 296評論 0 0