1. 程式人生 > >JAVA基礎之設計模式中的組合優於繼承

JAVA基礎之設計模式中的組合優於繼承

a. 程式碼在多個子類中重複;
b. 執行時的行為不容易改變;
c. 改變會牽一髮動全身,造成部分子型別不想要的改變;

問題提出

當修改超類(父類)時,無論是新增還是刪除,對於子類的影響都是非常大的,例如說定義了鴨子類, 然後有野鴨子、綠毛鴨、橡皮鴨。 我們希望新增入鴨子飛的行為, 那麼在父類中進行新增的話,就出現了會飛的橡皮鴨這種預料之外的情況。當然,我們可以在子類中通過空實現重寫該方法以解決該方法對於子型別的影響。那要是新增其他方法呢? 是不是要一個個去找子類,然後做空?

組合優於繼承

對於上面的問題,我們可以在父類中新增“行為”資料成員,針對每一個鴨子(類的例項)賦值不同的行為。把行為抽象成類,便可程式碼複用