軟體設計原則 多用組合少用繼承

2021-08-29 01:51:09 字數 1071 閱讀 3075

黑盒實現重用的兩個途徑:白盒和黑盒重用。白盒基於類的繼承,但要承受繼承的缺點。黑盒基於物件組合。

public class registereduser : user

派生類繼承了父類的上下文,獲得父物件狀態的某種可見性。隨著不同版本派生類的出現,並不能保證父類和派生類真的可以交替使用。保證父類及其派生類可以交替使用是黎克特制代換原則的目標。

public class registereduser

public object dowork()

private object process

(object data)

}

派生類(registereduser)以黑盒的方式使用基類(user)型別。registereduser不能訪問user的內部成員,也不能以任何方式改變它的行為,它使用這個物件而不是改變這個物件來實現它的目標。外部呼叫到達包裝類,包裝類把這個呼叫委託給內部持有的類的例項。

把包裝類和被包裝的類連在一起的邏輯是由你來決定的。你決定user類的哪個部分應該暴露出去,以及如何暴露出去。派生成:registereduser,基類:user

組合有乙個關鍵的好處沒有辦法通過繼承得到:它是一種防禦式程式設計(defensiveprogramming),就這一點而論,更難引入與物件導向裡廣為人知的糟糕實踐有關的細微缺陷,如脆弱的基類、虛成員和建構函式。

組合起來的兩個類沒有明顯的關係;你不能在需要user例項的地方使用registereduser類。如果最後證明這是乙個問題,你可以讓兩個類實現某個通用的iuser介面。我們想指出的另乙個偏好組合的觀點是它顯式否定繼承。在這種情況下,它建議開發者,特別是初級開發者,不要把物件看作設計整個世界的新方式。就物件導向設計而言,關鍵是這個模型是針對特定問題定製和優化的。有時候,我們傾向於過度抽象,這會產生不夠優化的類圖。

程式設計 多用組合少用繼承原則

一 方法服用的兩種最常用的技術就是類繼承和物件組合。1.繼承復用 子類中可以將父類的方法當作自己的方法使用 非private修飾的 優點 可以通過重寫父類方法,來修改或擴充套件父類方法 缺點 繼承來的方法在編譯期就已經確定,無法在執行期間改變從父類繼承來的方法的行為 子類和父類是強耦合關係,也就是說...

多用組合少用繼承的設計思想

為什麼多用組合少用繼承?繼承最大的問題就在於 容易繼承層次過深 繼承關係過於複雜影響到 的可讀性和可維護性。為什麼繼承容易過深過複雜?繼承是實現多型的手段,當態太多時,就容易導致過於複雜和過深。我們以穿戴衣物為例,如圖 從對人體保護部位的不同可以分為 從品牌不同可分為 為了圖更簡單,我略掉了襪子 帽...

為什麼多用組合,少用繼承?

繼承和組合都是實現類重用的手段,何時用繼承何時用組合?繼承表示 is a 的關係,繼承是對已有的類做一番改造,以此獲得乙個特殊的版本。即將乙個較為抽象的類改造成能適用於某些特定需求的類。組合表示 has a 的關係,如果兩個類之間有明顯的整體 部分的關係,適合用組合,比如people和arm類。將a...