<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 功能強大 支持多語言、二開方便! 廣告
                ### 抽象工廠模式 提供一個創建一系列相關或互相依賴對象的接口,而無需指定它們具體的類。(摘抄) 抽象工廠模式是工廠模式的一種拓展吧——這個工廠需要創建多個類,而這些類共同組成一個系列 ~~~ //首先確定好產品的抽象類 public abstract class AbstractProductA { } public abstract class AbstractProductB { } //A和B組成一個系列產品 public class ProductA1 extends AbstractProductA { } public class ProductB1 extends AbstractProductB { } public class ProductA2 extends AbstractProductA { } public class ProductB2 extends AbstractProductB { } //產品類定義完了之后開始定義工廠類 public abstract class AbstractFactory { public abstract AbstractProductA createProductA(); public abstract AbstractProductB createProductB(); } public class ConcreteFactory1 extends AbstractFactory { @Override public AbstractProductA createProductA() { // TODO Auto-generated method stub return new ProductA1(); } @Override public AbstractProductB createProductB() { // TODO Auto-generated method stub return new ProductB1(); } } public class ConcreteFactory2 extends AbstractFactory { @Override public AbstractProductA createProductA() { // TODO Auto-generated method stub return new ProductA2(); } @Override public AbstractProductB createProductB() { // TODO Auto-generated method stub return new ProductB2(); } } class Client { public static void main() { // AbstractFactory factory = new ConcreteFactory2(); AbstractFactory factory = new ConcreteFactory1(); AbstractProductA productA = factory.createProductA(); AbstractProductB productB = factory.createProductB(); } } ~~~ 抽象工廠模式好處有兩點: 1.工廠只需要初始化一次,當產品需要替換的時候只需要替換很少的代碼 2.客戶端在使用的時候都是通過抽象接口在操縱實例,具體的類沒有暴露在外面 缺點: 同樣也是工廠模式的缺點,就是增加一個產品的時候需要增加很多類和代碼。 ### 解決辦法: 1.用簡單工廠模式,當增加功能的時候只需要增加switch case語句,但是違背了開放-封閉原則,而且由于需要生產的類很多,所以switch case也會很多,所以不可取。 2.用反射機制,動態的去生產所需要的類 ~~~ public class AbstractFactory { private String s; public AbstractFactory(String s) { this.s = s; } public AbstractProductA createProductA() { return (AbstractProductA) Class.forName("ProductA"+s).newInstance(); } public AbstractProductB createProductB() { return (AbstractProductB) Class.forName("ProductB"+s).newInstance(); } } class Client { public static void main() { AbstractFactory factory = new AbstractFactory("1"); AbstractProductA productA = factory.createProductA(); AbstractProductB productB = factory.createProductB(); } } ~~~ 當需要添加一個功能的時候在工廠類中增加一個生產方法就好了 在簡單工廠模式中用到switch case的地方也可以考慮用反射機制來解除耦合。
                  <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>

                              哎呀哎呀视频在线观看