合成 聚合復用原則

2021-06-28 22:20:07 字數 1165 閱讀 3402

一:合成/聚合復用原則

盡量使用合成/聚合,盡量不要使用類繼承

二:什麼是合成?

合成表示一種強的擁有關係,體現了嚴格的部分和整體的關係,部分和整體的生命週期一樣,打個比方:人有兩個胳膊,胳膊和人就是部分和整體的關係,人去世了,那麼胳膊也就沒用了,也就是說胳膊和人的生命週期是相同的

合成關係用實心的菱形+實線來表示

三:什麼是聚合?

聚合表示一種弱的擁有關係,體現的是a物件可以包含b物件,但是b物件並不是a物件的一部分,打個比方:人是群居動物,所以每個人屬於乙個人群,乙個人群可以有多個人,所以人群和人是聚合的關係

四:合成/聚合復用原則結構圖

1和2以及n,被稱為基數,表示這一端的類可以有幾個例項,很顯然,乙個人有兩個胳膊,如果乙個類可能有無數個例項,則用n表示,一人群可能有無數個人

五:只有當以下的條件全部被滿足時,才應當使用繼承關係。

1. 子類是超類的乙個特殊種類,而不是超類的乙個角色,也就是區分「has-a」和「is-a」.只有「is-a」關係才符合繼承關係,「has-a」關係應當使用聚合來描述。

2 .永遠不會出現需要將子類換成另外乙個類的子類的情況。如果不能肯定將來是否會變成另外乙個子類的話,就不要使用繼承。

3 .子類具有擴充套件超類的責任,而不是具有置換掉或登出掉超類的責任。如果乙個子類需要大量的置換掉超類的行為,那麼這個類就不應該是這個超類的子類。

錯誤的使用繼承而不是合成/聚合的乙個常見原因是錯誤地把「has-a」當成了「is-a」.」is-a」代表乙個類是另外乙個類的一種;而「has-a」代表乙個類是另外乙個類的乙個角色,而不是另外乙個類的特殊種類。

我們需要辦理一張銀行卡,如果銀行卡預設都擁有了存款、取款和透支的功能,那麼我們辦理的卡都將具有這個功能,此時使用了繼承關係:

為了靈活地擁有各種功能,此時可以分別設立儲蓄卡和信用卡兩種,並有銀行卡來對它們進行聚合使用。此時採用了合成復用原則:

本文是對以下鏈結的加工:

合成 聚合復用原則CARP

1 在乙個新的物件裡面使用一些已有的物件,使之成為新物件的一部分,新物件通過向這些物件的委派達到復用已有功能的目的。在物件導向設計裡,不同環境中復用已有設計和實現的基本方法 繼承 合成 聚合。2 繼承復用 通過擴充套件乙個已有物件的實現來得到新的功能,基類明顯地捕獲共同的屬性和方法,而子類通過增加新...

設計模式原則 合成 聚合復用原則(四)

閱讀目錄 一 合成 聚合復用原則 二 什麼是合成?三 什麼是聚合?四 為什麼盡量不要使用類繼承而使用合成 聚合?五 合成 聚合復用原則結構圖 一 合成 聚合復用原則 盡量使用合成 聚合,盡量不要使用類繼承 二 什麼是合成?合成表示一種強的擁有關係,體現了嚴格的部分和整體的關係,部分和整體的生命週期一...

合成聚合原則

合成 聚合復用原則是在乙個新的物件裡面使用一些已有的物件,使之成為新物件的一部分 新的物件通過向這些物件的委派達到復用已有功能的目的。概括 要盡量使用合成 聚合,盡量不要使用繼承。1 在物件導向設計中,可以通過兩種基本方法在不同的環境中復用已有的設計和實現,即通過組合 聚合關係或通過繼承。繼承復用 ...