【面向對象基礎】| 面向對象設計的六原則理解和區別

每次說到六原則,可能開始只是會隨口而來的幾句定義,但是真正去設計模式的時候有正確應用呢?
筆者總結一下它們之間的關係,以及對應的面向對象的抽象,封裝,繼承,多態的特性呢?

1.功能簡單單一組,對應特徵:封裝

    要求模塊間鬆耦合,內部高聚合。

    1)單一職責原則——SRP  (針對類Class的單一功能要求

          抽象類,普通類要求功能簡單明瞭,避免多個功能耦合在一個類裏面

    2)接口隔離原則——ISP針對接口Interface的單一功能要求

         接口設計要求功能單一,避免功能過多耦合,避免繼承於接口的類實現冗餘功能的。

    3)迪米特原則 最小依賴原則——LOD(針對方法與方法之間的接口API的單一要求

         方法與方法之間調用時儘量減少類對象的內容,儘可能的使用原子類型變量,使用枚舉類型變量。

         保證方法與方法調用時候導致與其他類的耦合關係儘量減少。

         特別是提供給外界的參數時,不要讓其他類過多知道自己類的內部內容。


2. 封閉不修改組 ,應特徵:封裝+繼承

    1)裏式替換原則——LSP

     父類實現的方法子類可以直接使用,避免功能代碼的重複,子類不可以複寫,只能新建其他的方法。

     如果要實現擴展,則可以參考依賴導致倒置原則(不從實例化的父類中繼承,而從基於抽象類和接口的繼承)。


     2)開閉原則——OCP

        對修改封閉,對擴展允許。不能修改已有的類/父類,通過擴展實現修改軟件的變化。因爲已有的類的方法和接口 可能存在多個繼承,動了BaseClass,繼承的其他類也會受到影響。擴展方式參考依賴倒置原則。


3. OOP模式原型組,對應特徵:抽象+多態

    1)依賴倒置原則——DIP

        依賴倒置原則的幾個關鍵點:

  • 高層模塊不應該依賴低層模塊,兩者都應該依賴其抽象;
  • 抽象不應該依賴細節;
  • 細節應該依賴抽象。
     
大多數設計模式都是基於依賴倒置原則設計。
     基於前面第二點裏氏替換原則和開閉原則的硬性要求,實現方式是依賴倒置原則。如果需要擴展,需要父類抽象或者接口繼承的方式。調用的接口固定,無論是兩邊內容有修改,都可以保證接口不變。




------------------------------------------------------------------------------------------------

這篇面向對象六大原則文章講的比較形象,並且附帶代碼。

知乎這篇問題講了 里氏置換原則的疑問點。




發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章