版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、模式設(shè)計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)建模式,其用意是定義一個創(chuàng)建產(chǎn)品對象的工廠接 口,將實際創(chuàng)建工作推遲到子類中。工廠方法模式是簡單工廠模式的進一步抽象和推廣。由于使用了多態(tài)性,工廠方法模式保持了簡單工廠模式的優(yōu)點,而且克服了它的缺點。在工廠方法模式中,核心的工廠類不再負責所有產(chǎn)品的創(chuàng)建,而是將具體創(chuàng)建工作交給子類去做。這個核心類僅僅負責給岀具體工廠必須實現(xiàn)的接口,而不接觸哪一個產(chǎn)品類被實例化這種細節(jié)。這使得工廠方法模式可以允許系統(tǒng)在不修改工廠角色的情況下引進新產(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活動過程包括: 客戶端創(chuàng)建 BuIbCreator 對象,客戶端持有此對象的類型是 Creator ,而實際類型是BuIbCreator 。然后客戶端調(diào)用 BuIbCreator 的factory 方法,之后 BuIbCreator調(diào)用BuIbLight 的構(gòu)造函數(shù)創(chuàng)造岀產(chǎn)品 BulbLight 對象。四、工廠方法模式與簡單工廠模式工廠方法模式與簡單工廠模式再結(jié)構(gòu)上的不同不是很明顯。工廠方法類的核心是一個抽象工廠類,而簡單工廠模式把核心放在一個具體類上。工廠方法模式之所以有一個別名叫多態(tài)性工廠模式是因為具體工廠類都有
6、共同的接口,或者有共同的抽象父類。當系統(tǒng)擴展需要添加新的產(chǎn)品對象時, 僅僅需要添加一個具體對象以及一個具體工廠對象,原有工廠對象不需要進行任何修改, 也不需要修改客戶端, 很好的符合了 “開放-封閉“原則。而簡單 工廠模式在添加新產(chǎn)品對象后不得不修改工廠方法,擴展性不好。工廠方法模式退化后可以演變成簡單工廠模式。五、Factory Method 模式演化使用接口或抽象類抽象工廠角色和抽象場頻角色都可以選擇由接口或抽象類實現(xiàn)。抽象工廠角色可以規(guī)定岀多于一個的工廠方法,從而使具體工廠角色實現(xiàn)這些不同的工廠方法, 這些方法可以提供不同的商業(yè)邏輯,以滿足提供不同的產(chǎn)品對象的任務(wù)。產(chǎn)品的循環(huán)使用工廠方法
7、總是調(diào)用產(chǎn)品類的構(gòu)造函數(shù)以創(chuàng)建一個新的產(chǎn)品實例,然后將這個實例提供給客戶端。而在實際情形中,工廠方法所做的事情可以相當復(fù)雜。一個常見的復(fù)雜邏輯就是循環(huán)使用產(chǎn)品對象。工廠對象將已經(jīng)創(chuàng)建過的產(chǎn)品登記到一個聚集中, 然后根據(jù)客戶所請求的產(chǎn)品狀態(tài),向聚集查詢。如果有滿足要求的產(chǎn)品對象,就直接將產(chǎn)品返回客戶端;如果聚集中沒有這樣的產(chǎn)品對象,那么就創(chuàng)建一個新的滿足要求的產(chǎn)品對象,然后將這個對象登記到聚集中,再返還給客戶端。享元模式(Flyweight Pattern )就是這樣一個模式。多態(tài)性的喪失和模式的退化一個工廠方法模式的實現(xiàn)依賴于工廠角色和產(chǎn)品角色的多態(tài)性。在有些情況下,這個模式可以岀現(xiàn)退化。工廠
8、方法返回的類型應(yīng)當是抽象類型,而不是具體類型。調(diào)用工廠方法的客戶端應(yīng)當依賴抽象產(chǎn)品編程,而不是具體產(chǎn)品。如果工廠僅僅返回一個具體產(chǎn)品對象,便違背了工廠方法的用意,發(fā)生退化,這時就不再是工廠模式了。1工廠的等級結(jié)構(gòu):工廠對象應(yīng)當有一個抽象的超類型。如果等級結(jié)構(gòu)中只有一個具體工廠類的話,抽象工廠就可以省略,發(fā)生了退化。六、Factory Method 模式與其它模式的關(guān)系與工廠方法模式有關(guān)的模式還包括:模板方法模式、MVC模式、享元模式、備忘錄模式七、另外一個例子-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)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年度汽車貸款合同范本匯編
- 2025年度國家工商局監(jiān)制藝術(shù)品買賣合同范本
- 2025年度加氣塊磚建筑廢棄物資源化利用合同
- 2025年度公司管理人員績效考核及薪酬調(diào)整合同
- 2025年度國際貿(mào)易融資合同范本大全
- 2025年度城市物流配送接送合同范本
- 2025年度個人借款合同范本全新版
- 2025年人工智能產(chǎn)業(yè)股權(quán)回購與轉(zhuǎn)讓管理合同
- 2025年度建筑垃圾堆放處理合同標準范本
- 2025年度口罩生產(chǎn)設(shè)備升級改造合同
- 電流互感器試驗報告
- 蔣中一動態(tài)最優(yōu)化基礎(chǔ)
- 華中農(nóng)業(yè)大學(xué)全日制專業(yè)學(xué)位研究生實踐單位意見反饋表
- 七年級英語閱讀理解10篇(附答案解析)
- 抖音來客本地生活服務(wù)酒旅商家代運營策劃方案
- 鉆芯法樁基檢測報告
- 【學(xué)前教育小學(xué)化成因分析及其對策10000字(論文)】
- 無線網(wǎng)網(wǎng)絡(luò)安全應(yīng)急預(yù)案
- 國籍狀況聲明書【模板】
- 常用保潔綠化人員勞動合同范本5篇
- 腕管綜合征課件
評論
0/150
提交評論