<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>

                ThinkChat2.0新版上線,更智能更精彩,支持會話、畫圖、視頻、閱讀、搜索等,送10W Token,即刻開啟你的AI之旅 廣告
                # 創建型模式 * 簡單工廠 * 工廠方法 * 抽象工廠 * 建造者 * 原型 * 單例 ## 簡單工廠 ### 概要 * 對產品類抽象化,由具體產品類實現抽象產品類 * 工廠類負責實例化具體產品類,通過方法調用 ### 優點 將產品類的實例話與客戶端剝離解藕 ### 缺點 新增產品類時需要修改工廠類,不滿足開放-封閉原則的(對修改類封閉)這一條 ## 工廠方法 在簡單工廠的基礎上,進一步對工廠類抽象化,不同產品類由具體工廠類實例化 ### 優點 解決了簡單工廠不滿足封閉原則的問題 ### 缺點 增加了工作量,每新增一個產品類,需要新增對應的工廠類 ## 抽象工廠 * 存在多個抽象產品AbstractProductA,AbstractProductB,因為各自可能存在不同的實現 * 工廠類需要支持創建多種產品 ### 優點 切換Factory十分簡單,只要在客戶端實例化不一樣的Factory類就可以 ### 缺點 * 新增Product繁瑣,抽象產品類,對應工廠數量的產品類 * 修改1+N個工廠類,(1表示是工廠抽象類,N表示實現了抽象工廠的類數量)增加創建新產品類的方法 ----- 不符合開放封閉原則中的對類內部修改封閉的限制 ## 使用簡單工廠優化抽象工廠 新建DataAccess類,代替 工廠抽象類&工廠類,來創建產品類。 DataAccess類新增字段屬性type,表示當前的工廠類型。 創建產品類時,根據屬性type 通過switch case 來創建指定的類。 ### 優點 切換工廠時,只需要修改屬性type值 新增產品時,只需要新增創建新產品的方法 ### 缺點 修改的文件數從1+N減小為1,但還沒有滿足封閉原則。 ## 使用反射來代替switch case 通過配置的屬性type 實例化指定的產品 ## 建造者 ### 描述 抽象建造者類+若干實現類。建造者類中的方法調用產品類 ### 案例 * 做魚香肉絲 * 制作麥當勞 將對象的構建與它的表示分離。同樣的構建過程可以創建不同的表示。 ### 抽象建造者 + 建造者實現類 #### 優點 建造者實現類 繼承 抽象建造者,并實現抽象方法。 #### 缺點 需要在客戶端調用這些建造方法 ### 引入指揮者類(Director) 實例化指揮者類的時候傳入具體的建造者。 指揮者類使用建造者控制建造過程,并隔離建造者和客戶端
                  <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>

                              哎呀哎呀视频在线观看