【設計模式】依賴倒轉原則

  依賴倒轉原則

      定義:

        A:高層模塊不應該依賴低層模塊。兩個都應該依賴抽象

        B:抽象不應該依賴細節。細節應該依賴抽象

       (換言之,要針對接口編程,而不是針對實現編程)


什麼叫對接口編程呢,什麼又叫對實現編程呢?

     

      說一個非常簡單的例子。每個人的電腦都會有鼠標,鍵盤,我拔下鼠標插口,鍵盤依然能用;我拔下鍵盤插口,鼠標也依然能用,它們兩者是毫無關係的,只是根據拔下哪個接口來判斷哪個是否可以使用,拔下鼠標絲毫不影響鍵盤的使用,反之也一樣。

 

      類似於整個電腦的主板是一個大的應用程序,然後將鼠標、鍵盤、內存條、顯卡、硬盤等等封裝成各自的類,這樣的話不管你刪除或添加哪一個類都不會影響到其他的類的正常運行。如果你要針對實現編程呢?假如你的內存條壞了,你要買新的內存條就要對應到具體的某個品牌的主板,就算內存條跟主板一樣了,那還有硬盤、顯卡、鼠標、鍵盤呢!那就會出現換一個零件需要把主板也換了的尷尬

 


  里氏代換原則

      在生活中你想借花獻佛嗎?來學學裏氏代換原則吧

      我喜歡動物,那我一定喜歡烏龜,因爲主人都老死了,它還可能正值青年,傷心讓它傷心去吧。烏龜是動物的子類,我喜歡烏龜,但是不能就說我喜歡動物,我討厭蛇,蛇也是動物。

 

      在軟件中將一個基類對象替換成它的子類對象,程序不會產生任何錯誤和異常,反過來則不成立,如果一個軟件實體使用的是一個子類對象的話,那麼它不一定能夠使用基類對象。也就是說在程序中儘量使用父類來對對象進行定義,而在運行時再確定其子類類型,用子類對象來替換父類對象

 

      好,借花獻佛就要來了,上面說了,父換子,程序不報錯,子換父就不行。所以我們在運用里氏代換原則時,讓子類繼承父類或實現父類接口,運行時,子類實例替換父類實例,我們很方便的擴展系統功能,同時無須修改原有子類的代碼,增加新的功能可以通過在子類中實現。

 

      你想追一個女生,你自己沒有汽車,但你可以開你父親的汽車,這就是子類實例替換父類實例;開車過程中你想讓女生對你的印象深刻,於是你開始甩尾飄移,秀車技,這就是在子類中增加了新的功能。借你父親的車來達到你想要的目的,你說這是不是借花獻佛呢?

 

 

 

 里氏代換:子類型必須能夠替換掉它們的父類型


對於這樣一個帥氣博主,你是否喜歡呢?歡迎給博主留言!!!