/** * 依賴倒轉原則 * 定義: 抽象不該該依賴細節,細節應該依賴於抽象 * 解釋:開發過程當中,要學會針對接口編程,不要針對需求進行編程 * 特徵: * 高層模塊不該該依賴低層模塊,兩個都應該依賴抽象 * 抽象不該該依賴細節,細節應該依賴抽象 * 理解:在面向過程開發中,爲了使代碼複用,常常將經常使用的代碼進行封裝成方法提取出來,這樣在實現新功能的時候, * 若是有用來的方法,直接調用該方法就能夠了,好比鏈接數據庫,咱們將其封裝成一個方法,每次須要鏈接時, * 高層模塊調用這個底層函數就能夠了,這個也叫作 【高層模塊】依賴【底層模塊】; * 可是高層模塊依賴底層模塊這樣的耦合性仍是比較高,好比咱們須要鏈接其餘的數據庫,或者由mysql轉換成orcal了 * 那此時咱們封裝的函數不適用於當前場景了,那就須要從新開發; * 可是,若是使高層模塊和底層模塊都依賴於接口或者抽象類,只要接口和抽象類穩定不變,那麼作任何一個更改都不用 * 擔憂其餘受到影響,這樣就使用高層模塊,底層模塊都很容易的被複用,並且不會影響其餘的組件 *//** * 里氏代還原則 * 白話翻譯:一個軟件實體若是使用的是一個父類的話,那麼必定適用於其子類,並且它察覺不出父類對象和子類對象的區別 * 也就是說在軟件裏面,把父類都替換成它的子類,程序的行爲都沒有變化,簡單說就是子類型必須能替換它的父類型 * 並且對程序沒有影響 * 特徵:只有當子類能夠替換掉父類,軟件單位的功能不受到影響,父類才能真正被複用,並且子類能夠在父類的基礎上增長新的行爲 * * 因爲有里氏代換原則,才使得開發-封閉成爲可能 * * 正是因爲子類型的可替換性才使得使用父類類型的模塊在無需修改的狀況下就能夠擴展 * *//** * 總結: * 依賴倒轉其實就是誰也不須要依靠誰,除了約定的接口,你們能夠靈活自如; * 依賴倒轉其實能夠說是面向對象設計的標誌,若是編寫時考慮的都是如何針對抽象編程而不是針對細節編程, * 即程序中全部的依賴關係都是終止與抽象類或者接口,那就是面向對象的設計了,反正就是過程化的設計 */