版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、<p><b> 工廠模式和單件模式</b></p><p><b> Factory模式</b></p><p><b> 應(yīng)用背景</b></p><p> 我們經(jīng)常抽象出一些類的公共接口以形成抽象基類或者接口,這樣就可以通過(guò)聲明一個(gè)指向基類的指針來(lái)指向?qū)嶋H的子類實(shí)現(xiàn),達(dá)到了多態(tài)
2、的目的。</p><p><b> 存在問(wèn)題</b></p><p> N多的子類繼承抽象基類,不得不在每次要用到子類的地方就編寫(xiě)諸如new XXX的代碼,此外必須知道實(shí)際子類的名字,在復(fù)雜系統(tǒng)中簡(jiǎn)直不可能,維護(hù)和擴(kuò)展也很困難。</p><p> 另外,在父類中并不知道具體要實(shí)例化哪一個(gè)具體的子類。</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)建過(guò)程:用工廠來(lái)創(chuàng)建產(chǎn)品</p><p> 2、將創(chuàng)建過(guò)程放到子類中:用具體工廠來(lái)創(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抽象基類有很多個(gè)子類,創(chuàng)建這些子類時(shí)我們很難知道子類的名字, */</p><p> /* 因此用工廠類將這些具體產(chǎn)品子類的創(chuàng)建封裝起來(lái)。但如果工廠類也是基類 */</p><p> /* 那么它就不知道要封裝哪個(gè)產(chǎn)品的創(chuàng)建
62、過(guò)程了。因此創(chuàng)建具體產(chǎn)品的過(guò)程要下 */</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ù)只作為接口,不能有實(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> 應(yīng)用背景</b></p><p> 需要?jiǎng)?chuàng)建一個(gè)唯一的變量(對(duì)象)</p><p> Singleton模式</p><p> Singleton結(jié)構(gòu)示意圖</p><p> 通過(guò)維護(hù)一個(gè)static的成員變量來(lái)記錄這個(gè)唯一的對(duì)象實(shí)例。</p><p>
92、通過(guò)提供一個(gè)static的接口instance來(lái)獲得這個(gè)唯一的實(shí)例。</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. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫(kù)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- c 設(shè)計(jì)模式工廠型設(shè)計(jì)示例
- 適應(yīng)模式和系統(tǒng)模式
- 設(shè)計(jì)模式 - 外觀模式
- 電器公司與工廠接口模式
- 工廠方法(factory method)模式
- [教育]張焱林_20160825_工廠設(shè)計(jì)模式
- 設(shè)計(jì)模式-裝飾者模式
- “信貸工廠”模式的對(duì)比分析
- 大規(guī)模單件定制化生產(chǎn)模式研究.pdf
- 商業(yè)模式創(chuàng)新工廠.pdf
- 基于單件生產(chǎn)模式下的資源調(diào)度問(wèn)題研究
- 面向單件生產(chǎn)模式的調(diào)度系統(tǒng)研究.pdf
- 實(shí)模式和保護(hù)模式的區(qū)別
- 淺談設(shè)計(jì)模式及如何選擇設(shè)計(jì)模式
- 夢(mèng)工廠動(dòng)畫(huà)電影的敘事模式
- 創(chuàng)維電視工廠菜單模式進(jìn)入方法
- 蘇南模式和溫州模式的比較研究
- 漢柯維修模式和效用模式的調(diào)整
- 基于單件小批生產(chǎn)模式的車間調(diào)度方法研究和系統(tǒng)開(kāi)發(fā).pdf
- 基金公司的組建模式和運(yùn)作模式
評(píng)論
0/150
提交評(píng)論