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

                ThinkChat2.0新版上線,更智能更精彩,支持會話、畫圖、視頻、閱讀、搜索等,送10W Token,即刻開啟你的AI之旅 廣告
                定義:抽象工廠模式(Abstract Factory),提供一個創建一系列相關或相互依賴對象的接口,而無需要指定它們具體的類。 類型:創建型模式。 類圖: ![](https://box.kancloud.cn/2016-08-19_57b6abd301273.png) 參與角色:   1. FeaturePhone、SmartPhone,分別是功能手機和智能手機的兩個抽象類,分別抽象出來了功能機的制造流程,智能機的制造流程。   2. NokiaFeaturePhone、SamsungFeaturePhone,分別實現了功能機的制造流程。   3. NokiaSmartPhone、SamsungSamrtPhone,分別實現了智能機的生產制造流程。   4. Factory,抽象工廠,即手機生產廠所必須具備的基本要求都抽象出來了。   5. NokiaFactory,根據Nokia手機生產的要求,在已經建設好的抽象工廠上完成了Nokia功能機以及智能機生產的基本要求。   6. SamsungFactory,根據Samsung手機生產的要求,在已經建設好的抽象工廠上完成了Samsung功能機和智能機生產的工廠基本要求。 概述: ?????? 隨著科技的發展,手機越來越強大,智能手機(Smart Phone)越來越普及,而傳統的功能手機(Feature Phone)銷量在進一步下滑。各家手機生產商都在裁剪功能手機的生產線,但是手機生產線能夠減少,廠房卻不能減少。為了節約成本,代工廠決定將Nokia的手機放在一個工廠里生產,Samsung手機放在另外一個工廠里生產。這樣就不用再新建工廠了,工廠的利用率得到提升。 ????? 抽象工廠模式就是為了解決這一問題而產生的。當不同的產品越來越多時,如果給每個產品新建一個工廠,會顯得很浪費,并且如果工廠過多,管理工廠本身也會成為一個問題。這個時候,一系列比較有共性的產品共用一個工廠是個比較好的選擇。將已經改造好的Nokia功能手機以及智能手機生產線,直接對接到已經根據要求改造過的Nokia手機生產廠就可以直接生產Nokia功能機以及智能機了。 代碼: [![復制代碼](https://box.kancloud.cn/2015-10-30_5632e1b8d3b57.gif)]( "復制代碼") ~~~ 1 #include <iostream> 2 #include <afxcom_.h> 3 using namespace std; 4 5 6 class CFeaturePhone 7 { 8 public: 9 virtual void ProducePhone() = 0; 10 }; 11 12 class CSmartPhone 13 { 14 public: 15 virtual void ProducePhone() = 0; 16 }; 17 18 class CNokiaFeaturePhone : public CFeaturePhone 19 { 20 public: 21 virtual void ProducePhone() 22 { 23 cout<<"Produce Nokia feature Phone."<<endl; 24 } 25 }; 26 27 class CsamsungFeaturePhone : public CFeaturePhone 28 { 29 public: 30 virtual void ProducePhone() 31 { 32 cout<<"Produce Samsung feature phone."<<endl; 33 } 34 }; 35 36 class CNokiaSmartPhone : public CSmartPhone 37 { 38 public: 39 virtual void ProducePhone() 40 { 41 cout<<"Produce Nokia smart phone."<<endl; 42 } 43 }; 44 45 class CSamsungSmartPhone : public CSmartPhone 46 { 47 public: 48 virtual void ProducePhone() 49 { 50 cout<<"Produce Samsung smart phone."<<endl; 51 } 52 }; 53 54 class CFactory 55 { 56 public: 57 virtual CFeaturePhone* CreateFeaturePhone() = 0; 58 virtual CSmartPhone* CreateSmartPhone() = 0; 59 }; 60 61 class CNokiaPhoneFactory : public CFactory 62 { 63 public: 64 virtual CFeaturePhone* CreateFeaturePhone() 65 { 66 CFeaturePhone* pPhone = new CNokiaFeaturePhone(); 67 68 return pPhone; 69 } 70 71 virtual CSmartPhone* CreateSmartPhone() 72 { 73 CSmartPhone* pPhone = new CNokiaSmartPhone(); 74 75 return pPhone; 76 } 77 }; 78 79 class CSamsungPhoneFactory : public CFactory 80 { 81 public: 82 virtual CFeaturePhone* CreateFeaturePhone() 83 { 84 CFeaturePhone* pPhone = new CsamsungFeaturePhone(); 85 86 return pPhone; 87 } 88 89 virtual CSmartPhone* CreateSmartPhone() 90 { 91 CSmartPhone* pPhone = new CSamsungSmartPhone(); 92 93 return pPhone; 94 } 95 }; 96 97 int _tmain(int argc, _TCHAR* argv[]) 98 { 99 // Nokia phone factory 100 CFactory* pNokiaFactory = new CNokiaPhoneFactory(); 101 CFeaturePhone* pNokiaFeaturePhone = pNokiaFactory->CreateFeaturePhone(); 102 pNokiaFeaturePhone->ProducePhone(); 103 CSmartPhone* pNokiaSmartPhone = pNokiaFactory->CreateSmartPhone(); 104 pNokiaSmartPhone->ProducePhone(); 105 106 delete pNokiaFeaturePhone; 107 pNokiaFeaturePhone = NULL; 108 delete pNokiaSmartPhone; 109 pNokiaSmartPhone = NULL; 110 delete pNokiaFactory; 111 pNokiaFactory = NULL; 112 113 // Samsung phone factory 114 CFactory* pSamsungFactory = new CSamsungPhoneFactory(); 115 CFeaturePhone* pSamsungFeaturePhone = pSamsungFactory->CreateFeaturePhone(); 116 pSamsungFeaturePhone->ProducePhone(); 117 CSmartPhone* pSamsungSmartPhone = pSamsungFactory->CreateSmartPhone(); 118 pSamsungSmartPhone->ProducePhone(); 119 120 delete pSamsungFeaturePhone; 121 pSamsungFeaturePhone = NULL; 122 delete pSamsungSmartPhone; 123 pSamsungSmartPhone = NULL; 124 delete pSamsungFactory; 125 pSamsungFactory = NULL; 126 127 return 0; 128 } ~~~ [![復制代碼](https://box.kancloud.cn/2015-10-30_5632e1b8d3b57.gif)]( "復制代碼") 適用場合:     適用產品簇比較多,并且產品系列比較多的類型。例如某電子公司,光鎳電子就有十幾個系列,因為每一條鎳電池生產線較小,如果每一款鎳電池建一個工廠,不現實,所有鎳電池生產線共用一個工廠會比較好。另外,公司不僅有鎳電池系列,還有不同款式的學習機,電子辭典等許多電子產品。這樣的公司就比較適合使用抽象工廠模式。 優缺點: 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>

                              哎呀哎呀视频在线观看