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

                合規國際互聯網加速 OSASE為企業客戶提供高速穩定SD-WAN國際加速解決方案。 廣告
                [TOC] ## 概述 1. 抽象工廠模式是一種創建型設計模式, 它能創建一系列相關的對象, 而無需指定其具體類。 2. 抽象工廠模式通常基于一組工廠方法 如以下情況就需要抽象模式 ![](https://cdn.jsdelivr.net/gh/idcpj/imgs/1599962289200-1599962289193.png) ## 場景 1. 一系列相關產品,例如`椅子`Chair、?`沙發`Sofa和`咖啡桌`Coffee-Table。 2. 系列產品的不同變體。例如,你可以使用`現代`Modern、?`維多利亞`Victorian、?`裝飾風藝術`Art-Deco等風格生成`椅子`、?`沙發`和`咖啡桌`。 ## 抽象工廠模式適合應用場景 - 如果代碼需要與多個不同系列的相關產品交互, 但是由于無法提前獲取相關信息, 或者出于對未來擴展性的考慮, 你不希望代碼基于產品的具體類進行構建, 在這種情況下, 你可以使用抽象工廠。 - 如果你有一個基于一組抽象方法的類, 且其主要功能因此變得不明確, 那么在這種情況下可以考慮使用抽象工廠模式。 ## 抽象工廠模式結構 **1.抽象產品 (Abstract Product)** 為構成系列產品的一組不同但相關的產品聲明接口。 **2. 具體產品 (Concrete Product)** 是抽象產品的多種不同類型實現。 所有變體 (維多利亞/現代) 都必須實現相應的抽象產品 (椅子/沙發)。 **3. 抽象工廠(Abstract Factory)** 接口聲明了一組創建各種抽象產品的方法。 **4. 具體工廠 (Concrete Factory)** 實現抽象工廠的構建方法。 每個具體工廠都對應特定產品變體, 且僅創建此種產品變體。 5. 盡管具體工廠會對具體產品進行初始化,其構建方法簽名必須返回相應的*抽象*產品。這樣,使用工廠類的客戶端代碼就不會與工廠創建的特定產品變體耦合。**客戶端**(Client)只需通過抽象接口調用工廠和產品對象,就能與任何具體工廠/產品變體交互。 ## 抽象工廠模式優缺點 **優點** 1. 你可以確保同一工廠生成的產品相互匹配。 2. 你可以避免客戶端和具體產品代碼的耦合。 3. 單一職責原則。 你可以將產品生成代碼抽取到同一位置, 使得代碼易于維護。 4. 開閉原則。 向應用程序中引入新產品變體時, 你無需修改客戶端代碼。 **缺點** 1. 由于采用該模式需要向應用中引入眾多接口和類, 代碼可能會比之前更加復雜。 ## 與其他模式的關系 * 在許多設計工作的初期都會使用[工廠方法模式](https://refactoringguru.cn/design-patterns/factory-method)(較為簡單,而且可以更方便地通過子類進行定制),隨后演化為使用[抽象工廠模式](https://refactoringguru.cn/design-patterns/abstract-factory)、[原型模式](https://refactoringguru.cn/design-patterns/prototype)或[生成器模式](https://refactoringguru.cn/design-patterns/builder)(更靈活但更加復雜)。 * [生成器](https://refactoringguru.cn/design-patterns/builder)重點關注如何分步生成復雜對象。[抽象工廠](https://refactoringguru.cn/design-patterns/abstract-factory)專門用于生產一系列相關對象。*抽象工廠*會馬上返回產品,*生成器*則允許你在獲取產品前執行一些額外構造步驟。 * [抽象工廠模式](https://refactoringguru.cn/design-patterns/abstract-factory)通常基于一組[工廠方法](https://refactoringguru.cn/design-patterns/factory-method),但你也可以使用[原型模式](https://refactoringguru.cn/design-patterns/prototype)來生成這些類的方法。 * 當只需對客戶端代碼隱藏子系統創建對象的方式時,你可以使用[抽象工廠](https://refactoringguru.cn/design-patterns/abstract-factory)來代替[外觀模式](https://refactoringguru.cn/design-patterns/facade)。 * 你可以將[抽象工廠](https://refactoringguru.cn/design-patterns/abstract-factory)和[橋接模式](https://refactoringguru.cn/design-patterns/bridge)搭配使用。如果由*橋接*定義的抽象只能與特定實現合作,這一模式搭配就非常有用。在這種情況下,*抽象工廠*可以對這些關系進行封裝,并且對客戶端代碼隱藏其復雜性。 * [抽象工廠](https://refactoringguru.cn/design-patterns/abstract-factory)、[生成器](https://refactoringguru.cn/design-patterns/builder)和[原型](https://refactoringguru.cn/design-patterns/prototype)都可以用[單例模式](https://refactoringguru.cn/design-patterns/singleton)來實現。
                  <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>

                              哎呀哎呀视频在线观看