每次說到六原則,可能開始只是會隨口而來的幾句定義,但是真正去設計模式的時候有正確應用呢?
筆者總結一下它們之間的關係,以及對應的面向對象的抽象,封裝,繼承,多態的特性呢?
1.功能簡單單一組,對應特徵:封裝
要求模塊間鬆耦合,內部高聚合。
1)單一職責原則——SRP (針對類Class的單一功能要求)
抽象類,普通類要求功能簡單明瞭,避免多個功能耦合在一個類裏面
2)接口隔離原則——ISP(針對接口Interface的單一功能要求)
接口設計要求功能單一,避免功能過多耦合,避免繼承於接口的類實現冗餘功能的。
3)迪米特原則 最小依賴原則——LOD(針對方法與方法之間的接口API的單一要求)
方法與方法之間調用時儘量減少類對象的內容,儘可能的使用原子類型變量,使用枚舉類型變量。
保證方法與方法調用時候導致與其他類的耦合關係儘量減少。
特別是提供給外界的參數時,不要讓其他類過多知道自己類的內部內容。
2. 封閉不修改組 ,對應特徵:封裝+繼承
1)裏式替換原則——LSP
父類實現的方法子類可以直接使用,避免功能代碼的重複,子類不可以複寫,只能新建其他的方法。
如果要實現擴展,則可以參考依賴導致倒置原則(不從實例化的父類中繼承,而從基於抽象類和接口的繼承)。
2)開閉原則——OCP
對修改封閉,對擴展允許。不能修改已有的類/父類,通過擴展實現修改軟件的變化。因爲已有的類的方法和接口 可能存在多個繼承,動了BaseClass,繼承的其他類也會受到影響。擴展方式參考依賴倒置原則。
3. OOP模式原型組,對應特徵:抽象+多態
1)依賴倒置原則——DIP
依賴倒置原則的幾個關鍵點:
- 高層模塊不應該依賴低層模塊,兩者都應該依賴其抽象;
- 抽象不應該依賴細節;
- 細節應該依賴抽象。
------------------------------------------------------------------------------------------------
這篇面向對象六大原則文章講的比較形象,並且附帶代碼。
知乎這篇問題講了 里氏置換原則的疑問點。