版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、<p><b> 工廠模式和單件模式</b></p><p><b> Factory模式</b></p><p><b> 應用背景</b></p><p> 我們經(jīng)常抽象出一些類的公共接口以形成抽象基類或者接口,這樣就可以通過聲明一個指向基類的指針來指向?qū)嶋H的子類實現(xiàn),達到了多態(tài)
2、的目的。</p><p><b> 存在問題</b></p><p> N多的子類繼承抽象基類,不得不在每次要用到子類的地方就編寫諸如new XXX的代碼,此外必須知道實際子類的名字,在復雜系統(tǒng)中簡直不可能,維護和擴展也很困難。</p><p> 另外,在父類中并不知道具體要實例化哪一個具體的子類。</p><p>
3、;<b> 程序舉例</b></p><p> #ifndef _PRODUCT_H</p><p> #define _PRODUCT_H</p><p> /************************************************************************/</p><
4、;p> /* Product */</p><p> /************************************************************************/</p><p> class Product</
5、p><p><b> {</b></p><p><b> public:</b></p><p> Product();</p><p> virtual ~Product();</p><p> virtual void operation();</p>
6、<p><b> };</b></p><p> /************************************************************************/</p><p> /* Concrete Product A
7、 */</p><p> /************************************************************************/</p><p> class ConcreteProductA : public Product</p><p><b> {</b></p>
8、<p><b> public:</b></p><p> ConcreteProductA();</p><p> virtual ~ConcreteProductA();</p><p> virtual void operation();</p><p><b> };</b
9、></p><p> /************************************************************************/</p><p> /* Concrete Product B */</p><p>
10、 /************************************************************************/</p><p> class ConcreteProductB : public Product</p><p><b> {</b></p><p><b> public:&
11、lt;/b></p><p> ConcreteProductB();</p><p> virtual ~ConcreteProductB();</p><p> virtual void operation();</p><p><b> };</b></p><p> /**
12、**********************************************************************/</p><p> /* Concrete Product C */</p><p> /****************************
13、********************************************/</p><p> class ConcreteProductC : public Product</p><p><b> {</b></p><p><b> public:</b></p><p>
14、 ConcreteProductC();</p><p> virtual ~ConcreteProductC();</p><p> virtual void operation();</p><p><b> };</b></p><p><b> #endif</b></p&g
15、t;<p> #include "product.h"</p><p> #include "stdio.h"</p><p> /************************************************************************/</p><p> /* P
16、roduct */</p><p> /************************************************************************/</p><p> Product::Product()</p>
17、<p><b> {</b></p><p><b> }</b></p><p> Product::~Product()</p><p><b> {</b></p><p><b> }</b></p><p&
18、gt; void Product::operation()</p><p><b> {</b></p><p> printf("Product operation...\n");</p><p><b> }</b></p><p> /**************
19、**********************************************************/</p><p> /* Concrete Product A */</p><p> /****************************************
20、********************************/</p><p> ConcreteProductA::ConcreteProductA()</p><p><b> {</b></p><p><b> }</b></p><p> ConcreteProductA::~
21、ConcreteProductA()</p><p><b> {</b></p><p><b> }</b></p><p> void ConcreteProductA::operation()</p><p><b> {</b></p><
22、p> printf("ConcreteProductA operation...\n");</p><p><b> }</b></p><p> /************************************************************************/</p><p>
23、 /* Concrete Product B */</p><p> /************************************************************************/</p><p> ConcreteProductB::Concre
24、teProductB()</p><p><b> {</b></p><p><b> }</b></p><p> ConcreteProductB::~ConcreteProductB()</p><p><b> {</b></p><p&g
25、t;<b> }</b></p><p> void ConcreteProductB::operation()</p><p><b> {</b></p><p> printf("ConcreteProductB operation...\n");</p><p>
26、<b> }</b></p><p> /************************************************************************/</p><p> /* Concrete Product C */<
27、/p><p> /************************************************************************/</p><p> ConcreteProductC::ConcreteProductC()</p><p><b> {</b></p><p><
28、b> }</b></p><p> ConcreteProductC::~ConcreteProductC()</p><p><b> {</b></p><p><b> }</b></p><p> void ConcreteProductC::operation(
29、)</p><p><b> {</b></p><p> printf("ConcreteProductC operation...\n");</p><p><b> }</b></p><p> #include "product.h"</
30、p><p> #include "stdio.h"</p><p> void main()</p><p><b> {</b></p><p> Product *pProduct = NULL;</p><p> pProduct = new ConcretePro
31、ductA();</p><p> pProduct->operation();</p><p> pProduct = new ConcreteProductB();</p><p> pProduct->operation();</p><p> pProduct = new ConcreteProductC();&l
32、t;/p><p> pProduct->operation();</p><p> printf("\n");</p><p><b> }</b></p><p><b> 程序結(jié)果:</b></p><p><b> 工廠模式&l
33、t;/b></p><p> Factory模式結(jié)構(gòu)示意圖</p><p> 1、封裝產(chǎn)品的創(chuàng)建過程:用工廠來創(chuàng)建產(chǎn)品</p><p> 2、將創(chuàng)建過程放到子類中:用具體工廠來創(chuàng)建產(chǎn)品</p><p> #ifndef _PRODUCT_H</p><p> #define _PRODUCT_H<
34、/p><p> /************************************************************************/</p><p> /* Product */</p><p> /******
35、******************************************************************/</p><p> class Product</p><p><b> {</b></p><p><b> public:</b></p><p> Pr
36、oduct();</p><p> virtual ~Product();</p><p> virtual void operation();</p><p><b> };</b></p><p> /******************************************************
37、******************/</p><p> /* Concrete Product A */</p><p> /************************************************************************/</p&
38、gt;<p> class ConcreteProductA : public Product</p><p><b> {</b></p><p><b> public:</b></p><p> ConcreteProductA();</p><p> virtual
39、~ConcreteProductA();</p><p> virtual void operation();</p><p><b> };</b></p><p> /************************************************************************/</p>
40、<p> /* Concrete Product B */</p><p> /************************************************************************/</p><p> class Concrete
41、ProductB : public Product</p><p><b> {</b></p><p><b> public:</b></p><p> ConcreteProductB();</p><p> virtual ~ConcreteProductB();</p>
42、<p> virtual void operation();</p><p><b> };</b></p><p> /************************************************************************/</p><p> /* Concrete Produc
43、t C */</p><p> /************************************************************************/</p><p> class ConcreteProductC : public Product</
44、p><p><b> {</b></p><p><b> public:</b></p><p> ConcreteProductC();</p><p> virtual ~ConcreteProductC();</p><p> virtual void oper
45、ation();</p><p><b> };</b></p><p><b> #endif</b></p><p> #include "product.h"</p><p> #include "stdio.h"</p><
46、p> /************************************************************************/</p><p> /* Product */</p><p> /******************
47、******************************************************/</p><p> Product::Product()</p><p><b> {</b></p><p><b> }</b></p><p> Product::~Produ
48、ct()</p><p><b> {</b></p><p><b> }</b></p><p> void Product::operation()</p><p><b> {</b></p><p> printf("Pro
49、duct operation...\n");</p><p><b> }</b></p><p> /************************************************************************/</p><p> /* Concrete Product A
50、 */</p><p> /************************************************************************/</p><p> ConcreteProductA::ConcreteProductA()</p><p>
51、;<b> {</b></p><p><b> }</b></p><p> ConcreteProductA::~ConcreteProductA()</p><p><b> {</b></p><p><b> }</b></p&g
52、t;<p> void ConcreteProductA::operation()</p><p><b> {</b></p><p> printf("ConcreteProductA operation...\n");</p><p><b> }</b></p>
53、<p> /************************************************************************/</p><p> /* Concrete Product B */</p><p> /************
54、************************************************************/</p><p> ConcreteProductB::ConcreteProductB()</p><p><b> {</b></p><p><b> }</b></p>&l
55、t;p> ConcreteProductB::~ConcreteProductB()</p><p><b> {</b></p><p><b> }</b></p><p> void ConcreteProductB::operation()</p><p><b>
56、 {</b></p><p> printf("ConcreteProductB operation...\n");</p><p><b> }</b></p><p> /******************************************************************
57、******/</p><p> /* Concrete Product C */</p><p> /************************************************************************/</p><p&g
58、t; ConcreteProductC::ConcreteProductC()</p><p><b> {</b></p><p><b> }</b></p><p> ConcreteProductC::~ConcreteProductC()</p><p><b> {&
59、lt;/b></p><p><b> }</b></p><p> void ConcreteProductC::operation()</p><p><b> {</b></p><p> printf("ConcreteProductC operation...\n&
60、quot;);</p><p><b> }</b></p><p> #ifndef _FACTORY_H</p><p> #define _FACTORY_H</p><p> class Product;</p><p> /***************************
61、*********************************************/</p><p> /* Product抽象基類有很多個子類,創(chuàng)建這些子類時我們很難知道子類的名字, */</p><p> /* 因此用工廠類將這些具體產(chǎn)品子類的創(chuàng)建封裝起來。但如果工廠類也是基類 */</p><p> /* 那么它就不知道要封裝哪個產(chǎn)品的創(chuàng)建
62、過程了。因此創(chuàng)建具體產(chǎn)品的過程要下 */</p><p> /* 放到工廠類的子類中。 */</p><p> /************************************************************************/</p><
63、p> class Factory</p><p><b> {</b></p><p><b> public:</b></p><p> virtual ~Factory() = 0; /* 基類析構(gòu)函數(shù)必須為虛函數(shù) */</p><p> virtual Product *Cre
64、ateProduct() = 0; /* 純虛函數(shù)只作為接口,不能有實例 */</p><p> protected:</p><p> Factory();</p><p><b> };</b></p><p> /***********************************************
65、*************************/</p><p> /* ConcreteFactoryA */</p><p> /************************************************************************/
66、</p><p> class ConcreteFactoryA : public Factory</p><p><b> {</b></p><p><b> public:</b></p><p> ConcreteFactoryA();</p><p> ~
67、ConcreteFactoryA();</p><p> Product *CreateProduct();</p><p><b> };</b></p><p> /************************************************************************/</p>
68、<p> /* ConcreteFactoryB */</p><p> /************************************************************************/</p><p> class ConcreteF
69、actoryB : public Factory</p><p><b> {</b></p><p><b> public:</b></p><p> ConcreteFactoryB();</p><p> ~ConcreteFactoryB();</p><p&g
70、t; Product *CreateProduct();</p><p><b> };</b></p><p> /************************************************************************/</p><p> /* ConcreteFactoryC
71、 */</p><p> /************************************************************************/</p><p> class ConcreteFactoryC : public Factory</p>&l
72、t;p><b> {</b></p><p><b> public:</b></p><p> ConcreteFactoryC();</p><p> ~ConcreteFactoryC();</p><p> Product *CreateProduct();</p>
73、;<p><b> };</b></p><p><b> #endif</b></p><p> #include "factory.h"</p><p> #include "product.h"</p><p> #include
74、 "stdio.h"</p><p> Factory::Factory()</p><p><b> {</b></p><p><b> }</b></p><p> Factory::~Factory()</p><p><b>
75、 {</b></p><p><b> }</b></p><p> /************************************************************************/</p><p> /* ConcreteFactoryA
76、 */</p><p> /************************************************************************/</p><p> ConcreteFactoryA::ConcreteFactoryA()</p><p><b> {&l
77、t;/b></p><p> printf("ConcreteFactoryA...\n");</p><p><b> }</b></p><p> ConcreteFactoryA::~ConcreteFactoryA()</p><p><b> {</b>&
78、lt;/p><p><b> }</b></p><p> Product *ConcreteFactoryA::CreateProduct()</p><p><b> {</b></p><p> return new ConcreteProductA();</p><p
79、><b> }</b></p><p> /************************************************************************/</p><p> /* ConcreteFactoryB */
80、</p><p> /************************************************************************/</p><p> ConcreteFactoryB::ConcreteFactoryB()</p><p><b> {</b></p><p>
81、 printf("ConcreteFactoryB...\n");</p><p><b> }</b></p><p> ConcreteFactoryB::~ConcreteFactoryB()</p><p><b> {</b></p><p><b>
82、 }</b></p><p> Product *ConcreteFactoryB::CreateProduct()</p><p><b> {</b></p><p> return new ConcreteProductB();</p><p><b> }</b><
83、;/p><p> /************************************************************************/</p><p> /* ConcreteFactoryC */</p><p> /*****
84、*******************************************************************/</p><p> ConcreteFactoryC::ConcreteFactoryC()</p><p><b> {</b></p><p> printf("ConcreteFactor
85、yC...\n");</p><p><b> }</b></p><p> ConcreteFactoryC::~ConcreteFactoryC()</p><p><b> {</b></p><p><b> }</b></p><
86、p> Product *ConcreteFactoryC::CreateProduct()</p><p><b> {</b></p><p> return new ConcreteProductC();</p><p><b> }</b></p><p> #include
87、"product.h"</p><p> #include "factory.h"</p><p> #include "stdio.h"</p><p> void main()</p><p><b> {</b></p><p&
88、gt; Factory *pFac = NULL;</p><p> Product *pPro = NULL;</p><p> pFac = new ConcreteFactoryA();</p><p> pPro = pFac->CreateProduct();</p><p> pPro->operation(
89、);</p><p> pFac = new ConcreteFactoryB();</p><p> pPro = pFac->CreateProduct();</p><p> pPro->operation();</p><p> pFac = new ConcreteFactoryC();</p>&
90、lt;p> pPro = pFac->CreateProduct();</p><p> pPro->operation();</p><p> printf("\n");</p><p><b> }</b></p><p> Singleton模式</p>
91、<p><b> 應用背景</b></p><p> 需要創(chuàng)建一個唯一的變量(對象)</p><p> Singleton模式</p><p> Singleton結(jié)構(gòu)示意圖</p><p> 通過維護一個static的成員變量來記錄這個唯一的對象實例。</p><p>
92、通過提供一個static的接口instance來獲得這個唯一的實例。</p><p> #ifndef _SINGLETON_H_</p><p> #define _SINGLETON_H_</p><p> class Singleton</p><p><b> {</b></p><p
93、><b> public:</b></p><p> static Singleton* Instance();</p><p> protected:</p><p> Singleton();</p><p><b> private:</b></p><p&
94、gt; static Singleton* _instance;</p><p><b> };</b></p><p><b> #endif</b></p><p> #include "singleton.h"</p><p> #include "st
95、dio.h"</p><p> Singleton* Singleton::_instance = 0;</p><p> Singleton::Singleton()</p><p><b> {</b></p><p> printf("Singleton...\n");<
96、/p><p><b> }</b></p><p> Singleton *Singleton::Instance()</p><p><b> {</b></p><p> if (_instance == 0)</p><p><b> {</b&g
97、t;</p><p> _instance = new Singleton();</p><p><b> }</b></p><p> return _instance;</p><p><b> }</b></p><p> #include "sin
98、gleton.h"</p><p> #include "stdio.h"</p><p> void main()</p><p><b> {</b></p><p> Singleton *pSgt = Singleton::Instance();</p><
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- c 設計模式工廠型設計示例
- 適應模式和系統(tǒng)模式
- 設計模式 - 外觀模式
- 電器公司與工廠接口模式
- 工廠方法(factory method)模式
- [教育]張焱林_20160825_工廠設計模式
- 設計模式-裝飾者模式
- “信貸工廠”模式的對比分析
- 大規(guī)模單件定制化生產(chǎn)模式研究.pdf
- 商業(yè)模式創(chuàng)新工廠.pdf
- 基于單件生產(chǎn)模式下的資源調(diào)度問題研究
- 面向單件生產(chǎn)模式的調(diào)度系統(tǒng)研究.pdf
- 實模式和保護模式的區(qū)別
- 淺談設計模式及如何選擇設計模式
- 夢工廠動畫電影的敘事模式
- 創(chuàng)維電視工廠菜單模式進入方法
- 蘇南模式和溫州模式的比較研究
- 漢柯維修模式和效用模式的調(diào)整
- 基于單件小批生產(chǎn)模式的車間調(diào)度方法研究和系統(tǒng)開發(fā).pdf
- 基金公司的組建模式和運作模式
評論
0/150
提交評論