合成復用原則(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就需要修改邏輯. 既不符合開閉原則
,也不符合合成復用原則
.
優化邏輯
將productdao
與dbconnection
類的依賴關係更換為組合的方式
將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 它要求在軟體復用時,要盡量先使用組合或者聚合等關聯關係來實現,其次才考慮使用繼承關係來實現。如果要使用繼承關係,則必...