<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                企業??AI智能體構建引擎,智能編排和調試,一鍵部署,支持知識庫和私有化部署方案 廣告
                ## 一、定義 合成/聚合復用原則是**在一個新的對象里面使用一些已有的對象,使之成為新對象的一部分;新的對象通過向這些對象的委派達到復用已有功能的目的**。 簡述為:**要盡量使用合成/聚合,盡量不要使用繼承**。 ## 二、具體說明 >繼承我們叫做白箱復用,相當于把所有的實現細節暴露給子類。組合/聚合稱為黑箱復用,我們是無法獲取到類以外的對象的實現細節的。雖然我們要根據具體的業務場景來做代碼設計,但也需要遵循 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)
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看