日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

合成复用原则java实例_第7节 合成复用原则

發布時間:2025/3/21 编程问答 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 合成复用原则java实例_第7节 合成复用原则 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

## 一、定義

合成/聚合復用原則是**在一個新的對象里面使用一些已有的對象,使之成為新對象的一部分;新的對象通過向這些對象的委派達到復用已有功能的目的**。

簡述為:**要盡量使用合成/聚合,盡量不要使用繼承**。

## 二、具體說明

>繼承我們叫做白箱復用,相當于把所有的實現細節暴露給子類。組合/聚合稱為黑箱復用,我們是無法獲取到類以外的對象的實現細節的。雖然我們要根據具體的業務場景來做代碼設計,但也需要遵循 OOP 模型。以數據庫操作為例,先來創建 DBConnection 類:

~~~

public class DBConnection {

public String getConnection() {

return "MySQL 數據庫連接";

}

}

~~~

創建 ProductDao 類:

~~~

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 + "增加產品");

}

}

~~~

這就是一種非常典型的合成復用原則的應用場景。但是,就目前的設計來說,DBConnection 還不是一種抽象,不便于系統擴展。目前的系統支持 MySQL 數據庫連接,假設業務發生變化,數據庫操作層要支持 Oracle 數據庫。當然,我們可以在 DBConnection 中增加對 Oracle 數據庫支持的方法。但是這違背了開閉原則。其實,我們可以不必修改 Dao 的代碼,將 DBConnection 修改為 abstract,來看代碼:

~~~

public abstract class DBConnection {

public abstract String getConnection();

}

~~~

然后,將 MySQL 的邏輯抽離:

~~~

public class MySQLConnection extends DBConnection {

@Override

public String getConnection() {

return "MySQL 數據庫連接";

}

}

~~~

再創建 Oracle 支持的邏輯:

~~~

public class OracleConnection extends DBConnection {

@Override

public String getConnection() {

return "Oracle 數據庫連接";

}

}

~~~

具體選擇交給應用層,來看一下類圖:

![](https://img.kancloud.cn/6b/77/6b771ab8eeff895d2ae305385a39d258_651x285.png)

總結

以上是生活随笔為你收集整理的合成复用原则java实例_第7节 合成复用原则的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。