C#設(shè)計(jì)模式工廠型設(shè)計(jì)示例
《C#設(shè)計(jì)模式工廠型設(shè)計(jì)示例》由會員分享,可在線閱讀,更多相關(guān)《C#設(shè)計(jì)模式工廠型設(shè)計(jì)示例(10頁珍藏版)》請?jiān)谘b配圖網(wǎng)上搜索。
模式設(shè)計(jì) c 創(chuàng)建型 factory method 名 稱 Factory Method 結(jié) 構(gòu) 意 圖 定義一個用于創(chuàng)建對象的接口 讓子類決定實(shí)例化哪一個類 Factory Method 使一個類的實(shí)例化延遲 到其子類 適 用 性 當(dāng)一個類不知道它所必須創(chuàng)建的對象的類的時候 當(dāng)一個類希望由它的子類來指定它所創(chuàng)建的對象的時候 當(dāng)類將創(chuàng)建對象的職責(zé)委托給多個幫助子類中的某一個 并且你希望將哪一個幫助子類是代 理者這一信息局部化的時候 namespace FactoryMethod DesignPattern using System These two classes could be part of a framework which we will call DP class DPDocument abstract class DPApplication protected DPDocument doc abstract public void CreateDocument public void ConstructObjects Create objects as needed including document CreateDocument abstract public void Dump These two classes could be part of an application class MyApplication DPApplication override public void CreateDocument doc new MyDocument override public void Dump Console WriteLine MyApplication exists class MyDocument DPDocument Summary description for Client public class Client public static int Main string args MyApplication myApplication new MyApplication myApplication ConstructObjects myApplication Dump return 0 一 工廠方法 Factory Method 模式 工廠方法 FactoryMethod 模式是類的創(chuàng)建模式 其用意是定義一個創(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)建工作交給子類去 做 這個核心類僅僅負(fù)責(zé)給出具體工廠必須實(shí)現(xiàn)的接口 而不接觸哪一個產(chǎn)品類被實(shí)例化這種 細(xì)節(jié) 這使得工廠方法模式可以允許系統(tǒng)在不修改工廠角色的情況下引進(jìn)新產(chǎn)品 在 Factory Method 模式中 工廠類與產(chǎn)品類往往具有平行的等級結(jié)構(gòu) 它們之間一一對應(yīng) 二 Factory Method 模式角色與結(jié)構(gòu) 抽象工廠 Creator 角色 是工廠方法模式的核心 與應(yīng)用程序無關(guān) 任何在模式中創(chuàng)建的 對象的工廠類必須實(shí)現(xiàn)這個接口 具體工廠 Concrete Creator 角色 這是實(shí)現(xiàn)抽象工廠接口的具體工廠類 包含與應(yīng)用程 序密切相關(guān)的邏輯 并且受到應(yīng)用程序調(diào)用以創(chuàng)建產(chǎn)品對象 在上圖中有兩個這樣的角色 BulbCreator 與 TubeCreator 抽象產(chǎn)品 Product 角色 工廠方法模式所創(chuàng)建的對象的超類型 也就是產(chǎn)品對象的共同父 類或共同擁有的接口 在上圖中 這個角色是 Light 具體產(chǎn)品 Concrete Product 角色 這個角色實(shí)現(xiàn)了抽象產(chǎn)品角色所定義的接口 某具體 產(chǎn)品有專門的具體工廠創(chuàng)建 它們之間往往一一對應(yīng) 3 程序舉例 using System public abstract class Light public abstract void TurnOn public abstract void TurnOff public class BulbLight Light public override void TurnOn Console WriteLine Bulb Light is Turned on public override void TurnOff Console WriteLine Bulb Light is Turned off public class TubeLight Light public override void TurnOn Console WriteLine Tube Light is Turned on public override void TurnOff Console WriteLine Tube Light is Turned off public abstract class Creator public abstract Light factory public class BulbCreator Creator public override Light factory return new BulbLight public class TubeCreator Creator public override Light factory return new TubeLight public class Client public static void Main Creator c1 new BulbCreator Creator c2 new TubeCreator Light l1 c1 factory Light l2 c2 factory l1 TurnOn l1 TurnOff Console WriteLine l2 TurnOn l2 TurnOff 工廠方法的活動序列圖 活動過程包括 客戶端創(chuàng)建 BulbCreator 對象 客戶端持有此對象的類型是 Creator 而實(shí)際類型是 BulbCreator 然后客戶端調(diào)用 BulbCreator 的 factory 方法 之后 BulbCreator 調(diào)用 BulbLight 的構(gòu)造函數(shù)創(chuàng)造出產(chǎn)品 BulbLight 對象 四 工廠方法模式與簡單工廠模式 工廠方法模式與簡單工廠模式再結(jié)構(gòu)上的不同不是很明顯 工廠方法類的核心是一個抽象工廠 類 而簡單工廠模式把核心放在一個具體類上 工廠方法模式之所以有一個別名叫多態(tài)性工廠模式是因?yàn)榫唧w工廠類都有共同的接口 或者有 共同的抽象父類 當(dāng)系統(tǒng)擴(kuò)展需要添加新的產(chǎn)品對象時 僅僅需要添加一個具體對象以及一個具體工廠對象 原 有工廠對象不需要進(jìn)行任何修改 也不需要修改客戶端 很好的符合了 開放 封閉 原則 而 簡單工廠模式在添加新產(chǎn)品對象后不得不修改工廠方法 擴(kuò)展性不好 工廠方法模式退化后可以演變成簡單工廠模式 五 Factory Method 模式演化 使用接口或抽象類 抽象工廠角色和抽象場頻角色都可以選擇由接口或抽象類實(shí)現(xiàn) 使用多個工廠方法 抽象工廠角色可以規(guī)定出多于一個的工廠方法 從而使具體工廠角色實(shí)現(xiàn)這些不同的工廠方法 這些方法可以提供不同的商業(yè)邏輯 以滿足提供不同的產(chǎn)品對象的任務(wù) 產(chǎn)品的循環(huán)使用 工廠方法總是調(diào)用產(chǎn)品類的構(gòu)造函數(shù)以創(chuàng)建一個新的產(chǎn)品實(shí)例 然后將這個實(shí)例提供給客戶端 而在實(shí)際情形中 工廠方法所做的事情可以相當(dāng)復(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)性的喪失和模式的退化 一個工廠方法模式的實(shí)現(xiàn)依賴于工廠角色和產(chǎn)品角色的多態(tài)性 在有些情況下 這個模式可以 出現(xiàn)退化 工廠方法返回的類型應(yīng)當(dāng)是抽象類型 而不是具體類型 調(diào)用工廠方法的客戶端應(yīng)當(dāng)依賴抽象 產(chǎn)品編程 而不是具體產(chǎn)品 如果工廠僅僅返回一個具體產(chǎn)品對象 便違背了工廠方法的用意 發(fā)生退化 這時就不再是工廠模式了 工廠的等級結(jié)構(gòu) 工廠對象應(yīng)當(dāng)有一個抽象的超類型 如果等級結(jié)構(gòu)中只有一個具體工廠類的 話 抽象工廠就可以省略 發(fā)生了退化 六 Factory Method 模式與其它模式的關(guān)系 與工廠方法模式有關(guān)的模式還包括 模板方法模式 MVC 模式 享元模式 備忘錄模式 7 另外一個例子 Factory Method pattern Real World example using System using System Collections Product abstract class Page ConcreteProduct class SkillsPage Page ConcreteProduct class EducationPage Page ConcreteProduct class ExperiencePage Page ConcreteProduct class IntroductionPage Page ConcreteProduct class ResultsPage Page ConcreteProduct class ConclusionPage Page ConcreteProduct class SummaryPage Page ConcreteProduct class BibliographyPage Page Creator abstract class Document Fields protected ArrayList pages new ArrayList Constructor public Document this CreatePages Properties public ArrayList Pages get return pages Factory Method abstract public void CreatePages ConcreteCreator class Resume Document Factory Method implementation override public void CreatePages pages Add new SkillsPage pages Add new EducationPage pages Add new ExperiencePage ConcreteCreator class Report Document Factory Method implementation override public void CreatePages pages Add new IntroductionPage pages Add new ResultsPage pages Add new ConclusionPage pages Add new SummaryPage pages Add new BibliographyPage FactoryMethodApp test class FactoryMethodApp public static void Main string args Document docs new Document 2 Note constructors call Factory Method docs 0 new Resume docs 1 new Report Display document pages foreach Document document in docs Console WriteLine document foreach Page page in document Pages Console WriteLine page- 1.請仔細(xì)閱讀文檔,確保文檔完整性,對于不預(yù)覽、不比對內(nèi)容而直接下載帶來的問題本站不予受理。
- 2.下載的文檔,不會出現(xiàn)我們的網(wǎng)址水印。
- 3、該文檔所得收入(下載+內(nèi)容+預(yù)覽)歸上傳者、原創(chuàng)作者;如果您是本文檔原作者,請點(diǎn)此認(rèn)領(lǐng)!既往收益都?xì)w您。
下載文檔到電腦,查找使用更方便
15 積分
下載 |
- 配套講稿:
如PPT文件的首頁顯示word圖標(biāo),表示該P(yáng)PT已包含配套word講稿。雙擊word圖標(biāo)可打開word文檔。
- 特殊限制:
部分文檔作品中含有的國旗、國徽等圖片,僅作為作品整體效果示例展示,禁止商用。設(shè)計(jì)者僅對作品中獨(dú)創(chuàng)性部分享有著作權(quán)。
- 關(guān) 鍵 詞:
- C# 設(shè)計(jì) 模式 工廠 示例
鏈接地址:http://www.3dchina-expo.com/p-10591794.html