設計模式七大原則之合成復用原則

2021-10-24 16:54:39 字數 1781 閱讀 9069

合成復用原則(composite reuse principle), 盡量使用組合或者聚合的方式而不是繼承達到軟體復用的原則.

繼承會增加物件間的耦合性, 繼承稱之為白箱復用, 相當於把所有的實現細節暴露給子類. 組合/聚合稱之為黑箱復用, 對類以外的物件時無法獲取到實現細節的.

類圖

**演示

package com.inconspicuousy.principle.crp.error;

/** 資料庫連線物件 */

class

dbconnection

}/** 這裡為了直接獲取到資料庫連線, 直接採用繼承的方式 */

class

productdao

extends

dbconnection

}/**

* 合成復用原則錯誤**演示

* * composite reuse principle 合成復用原則

* @author peng.yi

*/public

class

crperrorexample

}

執行結果
使用mysql 資料庫連線新增了一條資料

process finished with exit code 0

分析

這裡productdao因為要獲取到資料庫連線而直接採用繼承的方式, 雖然復用了**, 但是增加了物件間的耦合性, 當我們需要擴充套件oracle連線時, 這裡針對productdao就需要修改邏輯. 既不符合開閉原則,也不符合合成復用原則.

優化邏輯

productdaodbconnection類的依賴關係更換為組合的方式

dbconnection設計為介面, 其實現類提供真實的連線, 方便擴充套件資料庫連線.

類圖

**

package com.inconspicuousy.principle.crp.correct;

inte***ce

dbconnection

class

mysqldbconnection

implements

dbconnection

}class

oracledbconnection

implements

dbconnection

}class

productdao

public

void

addproduct()

}/**

* 合成復用原則正確示例

* * @author peng.yi

*/public

class

crpcorrectexample

}

執行結果
使用mysql資料庫連線新增了一條資料

使用oracle資料庫連線新增了一條資料

process finished with exit code 0

設計模式七大原則之合成復用原則

原則是盡量使用合成或者聚合的方式,而不是使用繼承 場景 有兩個類a和b,b要使用a中的方法有哪幾種方法 方法一 使用繼承,不符合合成復用 類圖 實現 package com.ldx.compositereuse public class cr1 classa class bextends a執行結果...

設計模式之七大原則 合成復用原則(七)

合成復用原則是物件導向設計原則的 7 條原則中剩下的最後一條,下面我們將對其進行詳細地介紹。合成復用原則 composite reuse principle,crp 又叫組合 聚合復用原則 composition aggregate reuse principle,carp 它要求在軟體復用時,要盡...

七大原則 合成復用原則

合成復用原則 composite reuse principle,crp 又叫組合 聚合復用原則 composition aggregate reuse principle,carp 它要求在軟體復用時,要盡量先使用組合或者聚合等關聯關係來實現,其次才考慮使用繼承關係來實現。如果要使用繼承關係,則必...