概念
- 定義:儘量使用對象組合(contains-A)/聚合(has-A),而不是繼承關係達到軟件複用的目的
- 優點:可以使系統更加靈活,降低類與類之間的耦合度,一個類的變化對其他類造成的影響相對較少
- 合成複用是達到開閉原則的一種實現方式
編碼
實例
/**
* @Description DB連接
* @date Dec 19, 2021
* @version 1.0
*/
public class DBConnection {
/**
* 獲取DB連接
* @return
*/
public String getConnection() {
return "Mysql數據庫連接";
}
}
/**
* @Description 產品DAO
* @date Dec 19, 2021
* @version 1.0
*/
public class ProductDao extends DBConnection {
/**
* 添加產品
*/
public void addProduct() {
String conn = super.getConnection();
System.out.println("使用" + conn + "增加產品");
}
}
/**
* @Description 測試類
* @date Dec 19, 2021
* @version 1.0
*/
public class Test {
public static void main(String[] args) {
ProductDao productDao = new ProductDao();
productDao.addProduct();
}
}
使用Mysql數據庫連接增加產品
合成複用原則
- 實現數據庫連接的擴展性
DBConnection.java
/**
* @Description DB連接
* @date Dec 19, 2021
* @version 1.0
*/
public abstract class DBConnection {
/**
* 獲取DB鏈接
* @return
*/
public abstract String getConnection();
}
/**
* @Description Mysql連接
* @date Dec 20, 2021
* @version 1.0
*/
public class MysqlConnection extends DBConnection {
@Override
public String getConnection() {
return "Mysql數據庫連接";
}
}
/**
* @Description Oracle連接
* @date Dec 20, 2021
* @version 1.0
*/
public class OracleConnection extends DBConnection {
@Override
public String getConnection() {
return "Oracle數據庫連接";
}
}
/**
* @Description 產品DAO
* @date Dec 19, 2021
* @version 1.0
*/
public class ProductDao {
private DBConnection dbConnection;
/**
* setter注入
* @param dbConnection
*/
public void setDbConnection(DBConnection dbConnection) {
this.dbConnection = dbConnection;
}
/**
* 添加產品
*/
public void addProduct() {
String conn = dbConnection.getConnection();
System.out.println("使用" + conn + "增加產品");
}
}
/**
* @Description 合成複用原則測試類
* @author Coisini
* @date Dec 19, 2021
* @version 1.0
*/
public class Test {
public static void main(String[] args) {
ProductDao productDao = new ProductDao();
productDao.setDbConnection(new MysqlConnection());
productDao.addProduct();
productDao.setDbConnection(new OracleConnection());
productDao.addProduct();
}
}
使用Mysql數據庫連接增加產品
使用Oracle數據庫連接增加產品
源碼
- End -
- 個人學習筆記 -