<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、智譜、豆包、星火、月之暗面及文生圖、文生視頻 廣告
                **定義**:工廠方法模式(FactoryMethod Pattern),定義一個用于創建對象的接口,讓子類決定實例化哪一個類。定義一個抽象工廠類,每一個產品,按照抽象工廠的基本要求新建一個工廠來生產新的產品。 類型:創建型模式。 類圖: **![](https://box.kancloud.cn/2016-08-19_57b6abd2d8e13.png)** **參與角色**: 1. AbstrctProduct,提供產品生產的標準接口。 1. ConcreteProductA,ConcreteProductB,按接口具體去實現生產的產品。 1. AbstractFactory,提供標準工廠規模的抽象工廠。 1. ConcreteFactoryA,ConcreteFactoryB,按接口標準定制的具體生產產品的在廠。 **概述**: ????????簡單工廠模式,在使用時,會違背OCP原則。工廠方法模式就是為了解決這一問題而產生的。每當有一個新的產品要生產時,不用去更改原有的產品線,也不用去修改原有的工廠,一切按規定析添加。這樣產品的生產流程一致,新工廠的建造也一致。工廠原有的生產管理方法便可以繼續使用,而且人員也不用重新培訓,就可以直接上崗。 ????????因為當增加新的訂單時,不需要去更改舊有的產品線以及工廠,這樣就可以最大限度的保證原有的產品能夠正常運行。這一點,就是工廠方法的核心。下面就以代碼來展現這一過程。 **代碼**: ~~~ // C++ #include?<iostream> #include?<afxcom_.h>? using?namespace?std; class?CCellPhone { public: ???virtual?void?ProducePhone() ???{ ???????cout<<"Produce?Normal?Phone."<<endl; ???} }; class?CNokia?:?public?CCellPhone { public: ???virtual?void?ProducePhone() ???{ ???????cout<<"Produce?Nokia?Phone."<<endl; ???} }; class?CSamsung?:?public?CCellPhone { public: ???virtual?void?ProducePhone() ???{ ???????cout<<"Produce?Samsung?Phone."<<endl; ???} }; class?CPhoneFactory { public: ???virtual?CCellPhone*?CreatePhone()?=?0; }; class?CNokiaFactory?:?public?CPhoneFactory { public: ???virtual?CCellPhone*?CreatePhone() ???{ ???????CCellPhone?*pPhone?=?new?CNokia(); ???????return?pPhone; ???} }; class?CSamsungFactory?:?public?CPhoneFactory { public: ???virtual?CCellPhone*?CreatePhone() ???{ ???????CCellPhone?*pPhone?=?new?CSamsung(); ???????return?pPhone; ???} }; int?_tmain(int?argc,?_TCHAR*?argv[]) { ???//?Nokia?cellphone?production?line ???CPhoneFactory*?pNokiaFactory?=?new?CNokiaFactory(); ???CCellPhone*?pNokiaPhone?=?pNokiaFactory->CreatePhone(); ???pNokiaPhone->ProducePhone(); ???//?Samsung?cellphone?production?line ???CPhoneFactory*?pSamsungFactory?=?new?CSamsungFactory(); ???CCellPhone*?pSamsungPhone?=?pSamsungFactory->CreatePhone(); ???pSamsungPhone->ProducePhone(); ???delete?pNokiaPhone; ???pNokiaPhone?=?NULL; ???delete?pSamsungPhone; ???pSamsungPhone?=?NULL; ???return?0; } //?C#代碼 using?System; using?System.Collections.Generic; using?System.Text; using?System.Diagnostics; namespace?Phone { ???public?class?CellPhone ???{ ???????public?virtual?void?ProducePhone() ???????{ ???????????Console.WriteLine("Produce?Normal?Phone."); ???????} ???} ???class?Nokia?:?CellPhone ???{ ???????public?override?void?ProducePhone() ???????{ ???????????Console.WriteLine("Produce?Nokia?Phone."); ???????} ???} ???class?Samsung?:?CellPhone ???{ ???????public?override?void?ProducePhone() ???????{ ???????????Console.WriteLine("Produce?Samsung?Phone."); ???????} ???} ???public?interface?IFactory ???{ ???????CellPhone?CreatePhone(); ???} ???public?class?NokiaFactory?:?IFactory ???{ ???????public?CellPhone?CreatePhone() ???????{ ???????????CellPhone?phone?=?new?Nokia(); ???????????return?phone; ???????} ???} ???public?class?SamsungFactory?:?IFactory ???{ ???????public?CellPhone?CreatePhone() ???????{ ???????????CellPhone?phone?=?new?Samsung(); ???????????return?phone; ???????} ???} ???class?Program ???{ ???????static?void?Main(string[]?args) ???????{ ???????????IFactory?nokiaFactory?=?new?NokiaFactory(); ???????????CellPhone?phone?=?nokiaFactory.CreatePhone(); ???????????phone.ProducePhone(); ???????????IFactory?samsungFactory?=?new?SamsungFactory(); ???????????phone?=?samsungFactory.CreatePhone(); ???????????phone.ProducePhone(); ???????} ???} } package?CellPhone; public?interface?IFactory?{ ???IPhone?createPhone(); } package?CellPhone; public?interface?IPhone?{ ???void?producePhone(); ??? } package?CellPhone; public?class?NokiaFactory?implements?IFactory?{ ???public?IPhone?createPhone() ???{ ???????IPhone?phone?=?new?NokiaPhone(); ??????? ???????return?phone; ???} } package?CellPhone; public?class?NokiaPhone?implements?IPhone?{ ???public?void?producePhone() ???{ ???????System.out.println("Produce?nokia?phone."); ???} } package?CellPhone; public?class?SamsungFactory?implements?IFactory?{ ???public?IPhone?createPhone() ???{ ???????IPhone?phone?=?new?SamsungPhone(); ??????? ???????return?phone; ???} } package?CellPhone; public?class?SamsungPhone?implements?IPhone?{ ???public?void?producePhone() ???{ ???????System.out.println("Produce?samsung?phone."); ???} } /** *?CellPhone.java */ package?CellPhone; /** *?@author?feihe027@163.com * */ public?class?CellPhone?{ ???/** ????*?@param?args ????*/ ???public?static?void?main(String[]?args)?{ ???????//?TODO?Auto-generated?method?stub ???????IFactory?factory?=?new?NokiaFactory(); ???????IPhone?phone?=?factory.createPhone(); ???????phone.producePhone(); ??????? ???????factory?=?new?SamsungFactory(); ???????phone?=?factory.createPhone(); ???????phone.producePhone(); ???} } ~~~ **優缺點**: 1. 優點,能夠最大限度地保證對修改關閉,對擴展開放。新的產品,都是通過新添加代碼來完成而不是去修改原有代碼來完成。 1. 缺點,每添加一個新產品,就新建一個工廠,稍顯有點浪費。如果工廠過多,管理工廠也會成為一件麻煩事。抽象工廠模式正好解決這一問題。 **參考資料**: 1. 《設計模式——可復用面向對象軟件基礎》 1. 《Java與模式》 1. 《大話設計模式》
                  <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>

                              哎呀哎呀视频在线观看