1. 程式人生 > >程式設計原則之組合/聚合複用原則

程式設計原則之組合/聚合複用原則

一、什麼是組合/聚合複用原則

儘量採用組合(contains-a)、聚合(has-a)的方式而不是繼承(is-a)的關係來達到軟體的複用目的

組合/聚合優點:

類之間的耦合比較低,一個類的變化對其他類造成的影響比較少

缺點:

類的數量增多實現起來比較麻煩

繼承的優點:

由於很多方法父類已經實現,子類的實現會相對比較簡單

缺點:

將父類暴露給了子類,一定程度上破壞了封裝性,父類的改變對子類影響比較大。

二、結合實際場景進行分析

模擬一個dao層進行增加產品的功能:

其類圖如下:

這裡ProductDao與DbConnection之間是繼承關係,這裡模擬的是使用MySql資料庫增加產品的功能,假設此時又增加一種資料庫oracle資料的連線,就得修改DbConnection的實現,這違反了開閉原則。我們可以使用擴充套件抽象類的方式進行實現:

此時的類圖:

上面這個既符合開不原則(對擴充套件開放,對修改關閉),不管再增加什麼資料庫連線,只要從DbConnection擴充套件一個類就行。也符合組合/聚合複用原則,ProductDao類與DbConnection類形成了一對一的組合關係。