七個(gè)原則7-合成(組合)/聚合復(fù)用原則
- 定義:盡量使用對(duì)象組合/聚合,而不是繼承關(guān)系達(dá)到軟件復(fù)用的目的
- 聚合
has-A
和組合contains-A
- 優(yōu)點(diǎn):可以使系統(tǒng)更加靈活这弧,降低類與類之間的耦合度蜈亩,降低類與類之間的耦合度,一個(gè)類的變化對(duì)其他類造成的影響相對(duì)較少
- 何時(shí)使用合成/聚合弃甥、繼承
代碼示例
未使用的組合/復(fù)用原則
當(dāng)想增加 DBConnection
的數(shù)據(jù)庫(kù)連接時(shí),需新增加類中的方法,違反開閉原則
源碼
public class DBConnection {
public String getConnection(){
return "MySQL數(shù)據(jù)庫(kù)連接";
}
}
//------------------------------------------------
public class ProductDao extends DBConnection {
public void addProduct(){
String conn = super.getConnection();
System.out.println("使用"+conn+"增加產(chǎn)品");
}
}
UML
未使用的組合/復(fù)用原則
使用的組合/復(fù)用原則
源碼
public interface DBConnection {
public String getConnection();
}
//------------------------------------------------
public class MySQLConnection implements DBConnection{
@Override
public String getConnection() {
return "MySQL數(shù)據(jù)庫(kù)連接";
}
}
//------------------------------------------------
public class PostgreSQLConnection implements DBConnection{
@Override
public String getConnection() {
return "PostgreSQL數(shù)據(jù)庫(kù)連接";
}
}
//------------------------------------------------
public class ProductDao {
private DBConnection dbConnection;
public void setDbConnection(DBConnection dbConnection){
this.dbConnection = dbConnection;
}
public void addProduct(){
String conn = dbConnection.getConnection();
System.out.println("使用"+conn+"增加產(chǎn)品");
}
}
//------------------------------------------------
public class Test {
public static void main(String[] args) {
ProductDao productDao = new ProductDao();
productDao.setDbConnection(new MySQLConnection());
productDao.addProduct();
}
}
UML
使用的組合/復(fù)用原則