1. 程式人生 > 其它 >設計原則 - 合成複用原則

設計原則 - 合成複用原則

目錄

概念

  • 定義:儘量使用物件組合(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資料庫連線增加產品
  • 類圖變化如下:

原始碼


- End -
- 個人學習筆記 -
以上為本篇文章的主要內容,希望大家多提意見,如果喜歡記得點個推薦哦 作者:Maggieq8324 出處:https://www.cnblogs.com/maggieq8324/ 本文版權歸作者和部落格園共有,歡迎轉載,轉載時保留原作者和文章地址即可。