c設(shè)計(jì)模式工廠型設(shè)計(jì)示例_第1頁
c設(shè)計(jì)模式工廠型設(shè)計(jì)示例_第2頁
c設(shè)計(jì)模式工廠型設(shè)計(jì)示例_第3頁
c設(shè)計(jì)模式工廠型設(shè)計(jì)示例_第4頁
c設(shè)計(jì)模式工廠型設(shè)計(jì)示例_第5頁
已閱讀5頁,還剩10頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

1、模式設(shè)計(jì)c#創(chuàng)建型factory methodamespaceFactoryMethod_Desig nPatternusing System;/ These two classes could be part of a framework,/ which we will call DPclass DPDocume ntabstract class DPApplicationprotected DPDocume nt doc;abstract public void CreateDocument(); public void ConstructObjects()/ Create objects

2、 as n eeded/ ./ i ncludi ng docume ntCreateDocume nt();abstract public void Dump();/ These two classes could be part of an application/ =class MyApplicati on : DPApplicati onoverride public void CreateDocument()doc = new MyDocument();override public void Dump()Console.WriteLine(MyApplication exists)

3、;class MyDocume nt : DPDocume nt/ / Summary descripti on for Clie nt./ public class Clientpublic static int Main( string args)MyApplication myApplication =new MyApplication();myApplication.Con structObjects();myApplication .Dump();return 0;/3659O.html一、工廠方法(Factory Method )模式工廠方法(FactoryMethod )模式是類

4、的創(chuàng)建模式,其用意是定義一個(gè)創(chuàng)建產(chǎn)品對象的工廠接 口,將實(shí)際創(chuàng)建工作推遲到子類中。工廠方法模式是簡單工廠模式的進(jìn)一步抽象和推廣。由于使用了多態(tài)性,工廠方法模式保持了簡單工廠模式的優(yōu)點(diǎn),而且克服了它的缺點(diǎn)。在工廠方法模式中,核心的工廠類不再負(fù)責(zé)所有產(chǎn)品的創(chuàng)建,而是將具體創(chuàng)建工作交給子類去做。這個(gè)核心類僅僅負(fù)責(zé)給岀具體工廠必須實(shí)現(xiàn)的接口,而不接觸哪一個(gè)產(chǎn)品類被實(shí)例化這種細(xì)節(jié)。這使得工廠方法模式可以允許系統(tǒng)在不修改工廠角色的情況下引進(jìn)新產(chǎn)品。在Factory Method模式中,工廠類與產(chǎn)品類往往具有平行的等級結(jié)構(gòu),它們之間一一對應(yīng)。(rc;iicBulbC.rraiorrubK-rcutorLig

5、htn 口皿創(chuàng) i; i .ight new|V 1BulbLight1111活動(dòng)過程包括: 客戶端創(chuàng)建 BuIbCreator 對象,客戶端持有此對象的類型是 Creator ,而實(shí)際類型是BuIbCreator 。然后客戶端調(diào)用 BuIbCreator 的factory 方法,之后 BuIbCreator調(diào)用BuIbLight 的構(gòu)造函數(shù)創(chuàng)造岀產(chǎn)品 BulbLight 對象。四、工廠方法模式與簡單工廠模式工廠方法模式與簡單工廠模式再結(jié)構(gòu)上的不同不是很明顯。工廠方法類的核心是一個(gè)抽象工廠類,而簡單工廠模式把核心放在一個(gè)具體類上。工廠方法模式之所以有一個(gè)別名叫多態(tài)性工廠模式是因?yàn)榫唧w工廠類都有

6、共同的接口,或者有共同的抽象父類。當(dāng)系統(tǒng)擴(kuò)展需要添加新的產(chǎn)品對象時(shí), 僅僅需要添加一個(gè)具體對象以及一個(gè)具體工廠對象,原有工廠對象不需要進(jìn)行任何修改, 也不需要修改客戶端, 很好的符合了 “開放-封閉“原則。而簡單 工廠模式在添加新產(chǎn)品對象后不得不修改工廠方法,擴(kuò)展性不好。工廠方法模式退化后可以演變成簡單工廠模式。五、Factory Method 模式演化使用接口或抽象類抽象工廠角色和抽象場頻角色都可以選擇由接口或抽象類實(shí)現(xiàn)。抽象工廠角色可以規(guī)定岀多于一個(gè)的工廠方法,從而使具體工廠角色實(shí)現(xiàn)這些不同的工廠方法, 這些方法可以提供不同的商業(yè)邏輯,以滿足提供不同的產(chǎn)品對象的任務(wù)。產(chǎn)品的循環(huán)使用工廠方法

7、總是調(diào)用產(chǎn)品類的構(gòu)造函數(shù)以創(chuàng)建一個(gè)新的產(chǎn)品實(shí)例,然后將這個(gè)實(shí)例提供給客戶端。而在實(shí)際情形中,工廠方法所做的事情可以相當(dāng)復(fù)雜。一個(gè)常見的復(fù)雜邏輯就是循環(huán)使用產(chǎn)品對象。工廠對象將已經(jīng)創(chuàng)建過的產(chǎn)品登記到一個(gè)聚集中, 然后根據(jù)客戶所請求的產(chǎn)品狀態(tài),向聚集查詢。如果有滿足要求的產(chǎn)品對象,就直接將產(chǎn)品返回客戶端;如果聚集中沒有這樣的產(chǎn)品對象,那么就創(chuàng)建一個(gè)新的滿足要求的產(chǎn)品對象,然后將這個(gè)對象登記到聚集中,再返還給客戶端。享元模式(Flyweight Pattern )就是這樣一個(gè)模式。多態(tài)性的喪失和模式的退化一個(gè)工廠方法模式的實(shí)現(xiàn)依賴于工廠角色和產(chǎn)品角色的多態(tài)性。在有些情況下,這個(gè)模式可以岀現(xiàn)退化。工廠

8、方法返回的類型應(yīng)當(dāng)是抽象類型,而不是具體類型。調(diào)用工廠方法的客戶端應(yīng)當(dāng)依賴抽象產(chǎn)品編程,而不是具體產(chǎn)品。如果工廠僅僅返回一個(gè)具體產(chǎn)品對象,便違背了工廠方法的用意,發(fā)生退化,這時(shí)就不再是工廠模式了。1工廠的等級結(jié)構(gòu):工廠對象應(yīng)當(dāng)有一個(gè)抽象的超類型。如果等級結(jié)構(gòu)中只有一個(gè)具體工廠類的話,抽象工廠就可以省略,發(fā)生了退化。六、Factory Method 模式與其它模式的關(guān)系與工廠方法模式有關(guān)的模式還包括:模板方法模式、MVC模式、享元模式、備忘錄模式七、另外一個(gè)例子-Real World example/ Factory Method patter n -usingusingSystem;Syste

9、m.Collectio ns;u/ ProductabstractclassPage匸/ Co ncreteProductSkillsPage : Page/ Co ncreteProductclass Education Page : Page/ Co ncreteProductclass ExperiencePage : Page民L/ Co ncreteProductclass Introduction Page : PageQ/ Co ncreteProductlass ResultsPage : Page7 Con creteProductclassConclusion Page :

10、 PageCo ncreteProductclass SummaryPage : Page/ Co ncreteProductclass BibliographyPage : Page/ Creatorabstract class Document/ FieldsI protected ArrayList pages =new ArrayList();/ Con structorpublic Docume nt()this .CreatePages();/ Propertiespublic ArrayList Pagesget returnpages; / Factory Methodabst

11、ract public void CreatePages();7 Con creteCreatorclass Resume : Document/ Factory Method impleme ntationoverride public void CreatePages()pages.Add(pages.Add(pages.Add(new SkillsPage();new EducationPage();new ExperiencePage();Con creteCreatorReport : Docume nt/ Factory Method impleme ntationft If I:

12、卜-override public void CreatePages()pages.Add(pages.Add(pages.Add(pages.Add(pages.Add(new IntroductionPage();new ResultsPage();new ConclusionPage();new SummaryPage();new BibliographyPage();/BESEFactoryMethodApp test class FactoryMethodApp public static void Main( string args )Document docs =newDocument 2 ;/ Note: con structors call Factory Methoddocs0 = newResume

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論