設計原則 - 合成複用原則
阿新 • • 發佈:2021-12-20
目錄
- End -
- 個人學習筆記 -
以上為本篇文章的主要內容,希望大家多提意見,如果喜歡記得點個推薦哦
作者:Maggieq8324
出處:https://www.cnblogs.com/maggieq8324/
本文版權歸作者和部落格園共有,歡迎轉載,轉載時保留原作者和文章地址即可。
概念
- 定義:儘量使用物件組合(contains-A)/聚合(has-A),而不是繼承關係達到軟體複用的目的
- 優點:可以使系統更加靈活,降低類與類之間的耦合度,一個類的變化對其他類造成的影響相對較少
- 合成複用是達到開閉原則的一種實現方式
編碼
例項
- 資料庫連線
DBConnection.java
/** * @Description DB連線 * @date Dec 19, 2021 * @version 1.0 */ public class DBConnection { /** * 獲取DB連線 * @return */ public String getConnection() { return "Mysql資料庫連線"; } }
ProductDao.java
/**
* @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 + "增加產品");
}
}
Test.java
/**
* @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(); }
MysqlConnection.java
/**
* @Description Mysql連線
* @date Dec 20, 2021
* @version 1.0
*/
public class MysqlConnection extends DBConnection {
@Override
public String getConnection() {
return "Mysql資料庫連線";
}
}
OracleConnection.java
/**
* @Description Oracle連線
* @date Dec 20, 2021
* @version 1.0
*/
public class OracleConnection extends DBConnection {
@Override
public String getConnection() {
return "Oracle資料庫連線";
}
}
ProductDao.java
/**
* @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 + "增加產品");
}
}
Test.java
/**
* @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資料庫連線增加產品
- 類圖變化如下: