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

2021-08-19 08:03:27 字數 868 閱讀 6064

一、方法服用的兩種最常用的技術就是類繼承和物件組合。

1.繼承復用:子類中可以將父類的方法當作自己的方法使用(非private修飾的)

優點:--可以通過重寫父類方法,來修改或擴充套件父類方法

缺點:--繼承來的方法在編譯期就已經確定,無法在執行期間改變從父類繼承來的方法的行為

--子類和父類是強耦合關係,也就是說,父類改變,必然導致子類改變

--繼承復用也成為「白盒服用」,也就是說父類的內部細節對於子類而言是可見的。

2.組合復用:類(a)的組成成員中有其他的若干物件(b、c), a has-b,這樣a就可以委託物件b呼叫其方法,即a以組合的方式復用物件b的方法。

優點:--組合復用也成為「黑盒復用」,因為當前物件只能委託所包含的物件呼叫其方法,這樣一來,當前物件所包含的物件方法的細節對當前物件是不可見的。

--物件與所包含物件為弱耦合關係,因為,如果修改當前物件所包含物件類的**,不必修改當前物件的**。

--當前物件可以在執行時動態指定所包含的物件,例如,假設com是乙個介面,該介面中有乙個computer()方法,那麼下列computer類的物件可以在執行是動態指定所包含的物件,即執行期間,computer類的例項可以呼叫setcom(com com)方法將其中的com變數存放任何實現com介面物件的引用。

public class computer

public void f()

}

缺點:

--容易導致系統中的物件過多

--為了組合多個物件,對於介面的定義必須仔細

二、多用組合,少用繼承

為了降低系統的耦合性,要多用組合,少用繼承。

裝飾模式、策略模式、中介者模式中會對於兩種復用方式的優缺點有多體現。敬待。

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

黑盒實現重用的兩個途徑 白盒和黑盒重用。白盒基於類的繼承,但要承受繼承的缺點。黑盒基於物件組合。public class registereduser user 派生類繼承了父類的上下文,獲得父物件狀態的某種可見性。隨著不同版本派生類的出現,並不能保證父類和派生類真的可以交替使用。保證父類及其派生類...

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

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

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

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