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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > asp.net >内容正文

asp.net

【设计模式】软件设计七大原则 ( 合成复用原则 | 代码示例 )

發(fā)布時間:2025/6/17 asp.net 58 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【设计模式】软件设计七大原则 ( 合成复用原则 | 代码示例 ) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

文章目錄

  • 一、合成復用原則簡介
  • 二、合成復用 與 繼承復用 優(yōu)缺點
  • 三、合成復用原則代碼示例
    • 1、繼承復用代碼示例
    • 2、合成復用代碼示例





一、合成復用原則簡介



合成復用原則 又稱為 組合復用原則 , 合成/聚合復用原則 , 組合/聚合復用原則 ;


合成復用原則定義 : 想要達到 軟件復用 的目的 , 盡量使用 對象 組合/聚合 , 而不是 繼承關系 ;


聚合 是 has-A 關系 ; ( 關系較弱 ) 代表部分事物的對象 ( 次 )代表聚合事物的對象 ( 主 ) 生命周期無關 , 刪除了聚合對象 , 不代表刪除了代表部分事物的對象 ;

組合 是 contains-A 關系 ; ( 關系較強 ) 一旦刪除 代表組合事物的對象 ( 主 ) , 那么 代表部分事物的對象 ( 次 ) 也一起被刪除 ;

繼承 是 is-A 關系 ;


電腦 與 U 盤 是聚合關系 , 電腦沒了 , U 盤可以獨立存在 , 還可以接在其它電腦上 ;


A 類中包含了 B 類的引用 , 當 A 類對象銷毀時 , B 類引用所指向的對象也一同消失 , 沒有任何一個引用指向他 , 該引用成為了垃圾對象 , 被回收 ; 這種情況就是 組合 ;

加入 A 類銷毀后 , B 類對象還有在其它位置被引用 , B 類對象不會被銷毀 , 此時這種關系就是 聚合 ;





二、合成復用 與 繼承復用 優(yōu)缺點




合成復用優(yōu)點 : 使系統(tǒng) 更加靈活 , 降低 類與類 之間的耦合度 , 一個類的變化對其他類造成的影響相對較少 ;

合成復用缺點 : 通過 組合 / 聚合 方式建造的系統(tǒng) , 有較多的對象需要管理 ;


繼承復用優(yōu)點 : 擴展性容易實現 , 繼承父類后 , 父類的所有功能都可以通過繼承關系進入子類 , 修改和擴展都比較容易 ;

繼承復用缺點 : 破壞包裝 , 繼承將父類的實現細節(jié)暴露給了子類 , 這種復用稱為白箱復用 ;


繼承復用 稱為 白箱復用 , 組合 / 聚合 復用 稱為 黑箱復用 ;

黑箱復用 看不到 , 如 A 類中包含 B 類 , A 看不到 B 的具體實現細節(jié) ;





三、合成復用原則代碼示例




1、繼承復用代碼示例


業(yè)務場景 : 向數據塊中添加數據 ; 先獲取數據庫連接 , 然后向數據庫中添加數據 ;

數據塊鏈接類 :

package compositionaggregation;/*** 數據塊連接*/ public class DBConnection {public String getConnection() {return "數據連接";} }

增加數據類 :

package compositionaggregation;/*** 創(chuàng)造產品*/ public class ProductDao extends DBConnection {/*** 增加產品*/public void addProduct() {// 先獲取連接String conn = super.getConnection();System.out.println("使用 " + conn + " 增加產品");} }

測試類 :

package compositionaggregation;public class Main {public static void main(String[] args) {ProductDao productDao = new ProductDao();productDao.addProduct();} }

執(zhí)行結果 :


2、合成復用代碼示例


數據庫連接抽象類 :

package compositionaggregation;/*** 數據塊連接*/ public abstract class DBConnection {public abstract String getConnection(); }

Oracle 數據庫連接類 :

package compositionaggregation;/*** Oracle 數據塊連接*/ public class OracleConnection extends DBConnection {@Overridepublic String getConnection() {return "Oracle 數據庫連接";} }

MySQL 數據庫連接類 :

package compositionaggregation;/*** MySQL 數據塊連接*/ public class MySqlConnection extends DBConnection {@Overridepublic String getConnection() {return "MySQL 數據庫連接";} }

插入數據類 : 通過組合復用 , 注入數據庫連接類 ;

package compositionaggregation;/*** 創(chuàng)造產品*/ public class ProductDao {/*** 通過組合方式注入數據庫連接*/private DBConnection connection;public ProductDao(DBConnection connection) {this.connection = connection;}/*** 增加產品*/public void addProduct() {// 先獲取連接String conn = connection.getConnection();System.out.println("使用 " + conn + " 增加產品");} }

測試類 :

package compositionaggregation;public class Main {public static void main(String[] args) {ProductDao productDao = new ProductDao(new OracleConnection());productDao.addProduct();} }

執(zhí)行結果 :

《新程序員》:云原生和全面數字化實踐50位技術專家共同創(chuàng)作,文字、視頻、音頻交互閱讀

總結

以上是生活随笔為你收集整理的【设计模式】软件设计七大原则 ( 合成复用原则 | 代码示例 )的全部內容,希望文章能夠幫你解決所遇到的問題。

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