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

                ??一站式輕松地調用各大LLM模型接口,支持GPT4、智譜、豆包、星火、月之暗面及文生圖、文生視頻 廣告
                #工廠方法模式(Factory Method pattern) ##簡介 “工廠方法模式(Factory Method Pattern)又稱為工廠模式,也叫虛擬構造器(Virtual Constructor)模式或者多態工廠(Polymorphic Factory)模式,它屬于類創建型模式。在工廠方法模式中,工廠父類負責定義創建產品對象的公共接口,而工廠子類則負責生成具體的產品對象,這樣做的目的是將產品類的實例化操作延遲到工廠子類中完成,即通過工廠子類來確定究竟應該實例化哪一個具體產品類。 ##與簡單工廠模式的對比 以計算器為例 ###簡單工廠模式 public class OperationFactory { public static operation createOperate(string operate) { Operation oper = null; switch (operate) { case "+": oper = new OperationAdd(); break; case "-": oper = new OperationSub(); break; case "*": oper = new OperationMul(); break; case "/": oper = new OperationDiv(); break; } return oper; } } 客戶端代碼 Operation oper; oper = OperationFactory.createOperate("+"); oper.NumberA = 1; oper.NumberB = 2; double result = oper.GetResult(); ####工廠方法模式 ``` interface IFactory { Operation CreateOperation(); } ``` 然后加減乘除各建一個具體工廠去實現這個接口。 ``` class addFactory: IFactory { public Operation CreateOperation() { return new OperationAdd(); } } class subFactory: IFactory { public Operation CreateOperation() { return new OperationSub(); } } class mulFactory: IFactory { public Operation CreateOperation() { return new OperationMul(); } } class divFactory: IFactory { public Operation CreateOperation() { return new OperationDiv(); } } ``` 客戶端的實現是這樣的。 ``` IFactory operFactory = new addFactory(); operation oper = operationFactory.CreateOperation(); oper.NumberA = 1; oper.NumberB = 2; double result = oper.GetResult(); ``` ***簡單工廠模式的最大優點在于工廠類中包涵了必要的邏輯判斷,根據客戶端的選擇條件動態實例化相關的類,對于客戶端來說,去除了與具體相關產品的依賴。***就像你的計算器,讓客戶端不用管該用哪個類的實例,只需要把'+'給工廠,工廠自動就給出了相應的實例,客戶端只要去做運算就可以了,不同的實例會實現不同的運算。但是問題也就在這里,如你所說,如果要加一個'求M數的N次方'的功能,我們是一定需要給運算工廠類的方法里加'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>

                              哎呀哎呀视频在线观看