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

                ??碼云GVP開源項目 12k star Uniapp+ElementUI 功能強大 支持多語言、二開方便! 廣告
                ### 抽象工廠 抽象工廠模式看起來像我們之前所見的工廠對象,但擁有不是一個工廠方法而是幾個工廠方法, 每個工廠方法都會創建不同種類的對象。 這個想法是在創建工廠對象時,你決定如何使用該工廠創建的所有對象。 《設計模式》中提供的示例實現了跨各種圖形用戶界面(GUI)的可移植性:你創建一個適合你正在使用的GUI的工廠對象,然后從中請求菜單,按鈕,滑塊等等,它將自動為GUI創建適合該項目版本的組件。 因此,你可以將從一個GUI更改為另一個所產生的影響隔離限制在一處。 作為另一個示例,假設你正在創建一個通用游戲環境來支持不同類型的游戲。 使用抽象工廠看起來就像下文那樣: ```java // patterns/abstractfactory/GameEnvironment.java // An example of the Abstract Factory pattern // {java patterns.abstractfactory.GameEnvironment} package patterns.abstractfactory; import java.util.function.*; interface Obstacle { void action(); } interface Player { void interactWith(Obstacle o); } class Kitty implements Player { @Override public void interactWith(Obstacle ob) { System.out.print("Kitty has encountered a "); ob.action(); } } class KungFuGuy implements Player { @Override public void interactWith(Obstacle ob) { System.out.print("KungFuGuy now battles a "); ob.action(); } } class Puzzle implements Obstacle { @Override public void action() { System.out.println("Puzzle"); } } class NastyWeapon implements Obstacle { @Override public void action() { System.out.println("NastyWeapon"); } } // The Abstract Factory: class GameElementFactory { Supplier<Player> player; Supplier<Obstacle> obstacle; } // Concrete factories: class KittiesAndPuzzles extends GameElementFactory { KittiesAndPuzzles() { player = Kitty::new; obstacle = Puzzle::new; } } class KillAndDismember extends GameElementFactory { KillAndDismember() { player = KungFuGuy::new; obstacle = NastyWeapon::new; } } public class GameEnvironment { private Player p; private Obstacle ob; public GameEnvironment(GameElementFactory factory) { p = factory.player.get(); ob = factory.obstacle.get(); } public void play() { p.interactWith(ob); } public static void main(String[] args) { GameElementFactory kp = new KittiesAndPuzzles(), kd = new KillAndDismember(); GameEnvironment g1 = new GameEnvironment(kp), g2 = new GameEnvironment(kd); g1.play(); g2.play(); } } ``` 輸出結果: ```java Kitty has encountered a Puzzle KungFuGuy now battles a NastyWeapon ``` 在這種環境中,**Player**對象與**Obstacle**對象進行交互,但是根據你所玩游戲的類型,存在不同類型的玩家和障礙物。 你可以通過選擇特定的**GameElementFactory**來確定游戲的類型,然后**GameEnvironment**控制游戲的設置和玩法。 在此示例中,設置和玩法非常簡單,但是這些活動(初始條件和狀態變化)可以決定游戲的大部分結果。 這里,**GameEnvironment**不是為繼承而設計的,盡管這樣做很有意義。 它還包含“雙重調度”和“工廠方法”的示例,稍后將對這兩個示例進行說明。
                  <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>

                              哎呀哎呀视频在线观看