版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、大綱(dgng)w 創(chuàng)建型模式w 簡單工廠模式概述w 簡單工廠模式的結(jié)構(gòu)與實(shí)現(xiàn)w 簡單工廠模式的應(yīng)用(yngyng)實(shí)例w 創(chuàng)建對象與使用對象w 簡單工廠模式的簡化w 簡單工廠模式的優(yōu)缺點(diǎn)與適用環(huán)境第1頁/共30頁第一頁,共30頁。創(chuàng)建(chungjin)型模式 創(chuàng)建型模式(Creational Pattern)關(guān)注對象的創(chuàng)建過程 創(chuàng)建型模式對類的實(shí)例化過程進(jìn)行了抽象,能夠?qū)④浖K中對象的創(chuàng)建和對象的使用分離,對用戶隱藏了類的實(shí)例的創(chuàng)建細(xì)節(jié) 創(chuàng)建型模式描述如何將對象的創(chuàng)建和使用分離,讓用戶在使用對象時無須關(guān)心對象的創(chuàng)建細(xì)節(jié),從而降低系統(tǒng)的耦合度,讓設(shè)計方案更易于修改(xigi)和擴(kuò)展第2頁/
2、共30頁第二頁,共30頁。創(chuàng)建(chungjin)型模式 創(chuàng)建(chungjin)型模式關(guān)注點(diǎn) 創(chuàng)建(chungjin)什么(What) 由誰創(chuàng)建(chungjin)(Who) 何時創(chuàng)建(chungjin)(When)創(chuàng)建對象使用(shyng)對象第3頁/共30頁第三頁,共30頁。創(chuàng)建(chungjin)型模式 創(chuàng)建(chungjin)型模式一覽表模式名稱模式名稱定定 義義學(xué)習(xí)難度學(xué)習(xí)難度使用頻率使用頻率簡單工廠模式簡單工廠模式(Simple Factory Pattern)定義一個工廠類,它可以根據(jù)參數(shù)定義一個工廠類,它可以根據(jù)參數(shù)的不同返回不同類的實(shí)例,被創(chuàng)建的不同返回不同類的實(shí)例,被創(chuàng)建
3、的實(shí)例通常都具有共同的父類。的實(shí)例通常都具有共同的父類。工廠方法模式工廠方法模式(Factory Method Pattern)定義一個用于創(chuàng)建對象的接口,但定義一個用于創(chuàng)建對象的接口,但是讓子類決定將哪一個類實(shí)例化。是讓子類決定將哪一個類實(shí)例化。工廠方法模式讓一個類的實(shí)例化延工廠方法模式讓一個類的實(shí)例化延遲到其子類。遲到其子類。抽象工廠模式抽象工廠模式(Abstract Factory Pattern)提供一個創(chuàng)建一系列相關(guān)或相互依提供一個創(chuàng)建一系列相關(guān)或相互依賴對象的接口,而無須指定它們具賴對象的接口,而無須指定它們具體的類。體的類。建造者模式建造者模式(Builder Pattern)將
4、一個復(fù)雜對象的構(gòu)建與它的表示將一個復(fù)雜對象的構(gòu)建與它的表示分離,使得同樣的構(gòu)建過程可以創(chuàng)分離,使得同樣的構(gòu)建過程可以創(chuàng)建不同的表示。建不同的表示。原型模式原型模式(Prototype Pattern)使用原型實(shí)例指定待創(chuàng)建對象的類使用原型實(shí)例指定待創(chuàng)建對象的類型,并且通過復(fù)制這個原型來創(chuàng)建型,并且通過復(fù)制這個原型來創(chuàng)建新的對象。新的對象。單例單例模式模式(Singleton Pattern)確保一個類只有一個實(shí)例,并提供確保一個類只有一個實(shí)例,并提供一個全局訪問點(diǎn)來訪問這個唯一實(shí)一個全局訪問點(diǎn)來訪問這個唯一實(shí)例。例。第4頁/共30頁第四頁,共30頁。簡單工廠(gngchng)模式概述簡單工廠簡
5、單工廠(gngchng)模式示意圖模式示意圖客戶端工廠(gngchng)產(chǎn)品參數(shù)第5頁/共30頁第五頁,共30頁。簡單工廠模式(msh)概述 簡單工廠模式基本實(shí)現(xiàn)流程 具體產(chǎn)品類:將需要創(chuàng)建的各種不同產(chǎn)品對象的相關(guān)代碼封裝到具體產(chǎn)品類中 抽象產(chǎn)品類:將具體產(chǎn)品類公共的代碼進(jìn)行抽象和提取后封裝在一個抽象產(chǎn)品類中 工廠類:提供一個工廠類用于創(chuàng)建各種產(chǎn)品,在工廠類中提供一個創(chuàng)建產(chǎn)品的工廠方法,該方法可以根據(jù)所傳入?yún)?shù)的不同創(chuàng)建不同的具體產(chǎn)品對象 客戶端:只需調(diào)用工廠類的工廠方法并傳入相應(yīng)(xingyng)的參數(shù)即可得到一個產(chǎn)品對象第6頁/共30頁第六頁,共30頁。簡單(jindn)工廠模式概述 簡單
6、工廠模式定義 類創(chuàng)建(chungjin)型模式簡單工廠模式簡單工廠模式 (Simple Factory Pattern):定義一個工廠類,它可以根據(jù)參數(shù)的不同返回不同類的實(shí)例根據(jù)參數(shù)的不同返回不同類的實(shí)例,被創(chuàng)建的實(shí)例通常都具有共同的父類具有共同的父類。第7頁/共30頁第七頁,共30頁。簡單(jindn)工廠模式概述 簡單工廠模式定義 在簡單工廠模式中用于創(chuàng)建實(shí)例的方法通常是靜態(tài)( jngti)(static)方法,因此又被稱為靜態(tài)( jngti)工廠方法(Static Factory Method)模式 要點(diǎn):如果需要什么,只需要傳入一個正確的參數(shù),就可以獲取所需要的對象,而無須知道其創(chuàng)建細(xì)
7、節(jié)第8頁/共30頁第八頁,共30頁。簡單工廠模式的結(jié)構(gòu)(jigu)與實(shí)現(xiàn) 簡單工廠模式(msh)結(jié)構(gòu)if(arg.Equals(A) return new ConcreteProductA();else if(arg.Equals(B) return new ConcreteProductB();else .ConcreteProductAProductFactory+ FactoryMethod (string arg).: ProductConcreteProductB第9頁/共30頁第九頁,共30頁。簡單工廠模式(msh)的結(jié)構(gòu)與實(shí)現(xiàn) 簡單工廠模式(msh)結(jié)構(gòu) 簡單工廠模式(msh)包
8、含如下3個角色: Factory(工廠角色) Product(抽象產(chǎn)品角色) ConcreteProduct(具體產(chǎn)品角色)第10頁/共30頁第十頁,共30頁。簡單工廠模式的結(jié)構(gòu)(jigu)與實(shí)現(xiàn) 簡單工廠模式實(shí)現(xiàn) 典型的抽象產(chǎn)品(chnpn)類代碼:abstract class Product /所有產(chǎn)品類的公共業(yè)務(wù)方法所有產(chǎn)品類的公共業(yè)務(wù)方法public void MethodSame() /公共方法的實(shí)現(xiàn)公共方法的實(shí)現(xiàn)/聲明抽象業(yè)務(wù)方法聲明抽象業(yè)務(wù)方法public abstract void MethodDiff();第11頁/共30頁第十一頁,共30頁。簡單工廠模式(msh)的結(jié)構(gòu)與實(shí)
9、現(xiàn) 簡單工廠模式實(shí)現(xiàn) 典型的具體產(chǎn)品(chnpn)類代碼:class ConcreteProductA : Product /實(shí)現(xiàn)業(yè)務(wù)方法實(shí)現(xiàn)業(yè)務(wù)方法 public override void MethodDiff() /業(yè)務(wù)方法的實(shí)現(xiàn)業(yè)務(wù)方法的實(shí)現(xiàn) 第12頁/共30頁第十二頁,共30頁。簡單(jindn)工廠模式的結(jié)構(gòu)與實(shí)現(xiàn) 簡單工廠模式實(shí)現(xiàn) 典型(dinxng)的工廠類代碼:class Factory /靜態(tài)工廠方法靜態(tài)工廠方法 public static Product GetProduct(string arg) Product product = null; if (arg.Equa
10、ls(A) product = new ConcreteProductA(); /初始化設(shè)置初始化設(shè)置product else if (arg.Equals(B) product = new ConcreteProductB(); /初始化設(shè)置初始化設(shè)置product return product; 第13頁/共30頁第十三頁,共30頁。簡單工廠模式(msh)的結(jié)構(gòu)與實(shí)現(xiàn) 簡單( jindn)工廠模式實(shí)現(xiàn) 典型的客戶端代碼:class Program static void Main(string args) Product product; product = Factory.GetProd
11、uct(A); /通過工廠類創(chuàng)建產(chǎn)品對象通過工廠類創(chuàng)建產(chǎn)品對象 product.MethodSame(); product.MethodDiff(); 第14頁/共30頁第十四頁,共30頁。簡單工廠(gngchng)模式的應(yīng)用實(shí)例 實(shí)例(shl)說明某軟件公司要基于C#語言開發(fā)一套圖表庫,該圖表庫可以為應(yīng)用系統(tǒng)提供多種不同外觀的圖表,例如柱狀圖(HistogramChart)、餅狀圖(PieChart)、折線圖(LineChart)等。該軟件公司圖表庫設(shè)計人員希望為應(yīng)用系統(tǒng)開發(fā)人員提供一套靈活易用的圖表庫,通過設(shè)置不同的參數(shù)即可得到不同類型的圖表,而且可以較為方便地對圖表庫進(jìn)行擴(kuò)展,以便能夠在
12、將來增加一些新類型的圖表?,F(xiàn)使用簡單工廠模式來設(shè)計該圖表庫。第15頁/共30頁第十五頁,共30頁。簡單工廠模式的應(yīng)用(yngyng)實(shí)例 實(shí)例(shl)類圖圖表(tbio)庫結(jié)構(gòu)圖第16頁/共30頁第十六頁,共30頁。簡單工廠(gngchng)模式的應(yīng)用實(shí)例 實(shí)例代碼 (1) Chart:抽象圖表接口,充當(dāng)(chngdng)抽象產(chǎn)品類 (2) HistogramChart:柱狀圖類,充當(dāng)(chngdng)具體產(chǎn)品類 (3) PieChart:餅狀圖類,充當(dāng)(chngdng)具體產(chǎn)品類 (4) LineChart:折線圖類,充當(dāng)(chngdng)具體產(chǎn)品類 (5) ChartFactory:圖表
13、工廠類,充當(dāng)(chngdng)工廠類 (6) Program:客戶端測試類演示演示參考參考(cnko)代碼代碼 (DesignPatternSimpleFactory)第17頁/共30頁第十七頁,共30頁。簡單工廠模式的應(yīng)用(yngyng)實(shí)例 結(jié)果( ji gu)及分析 引入配置文件:App.configChart chart;chart = ChartFactory.GetChart(histogram); /通過靜態(tài)工廠方法創(chuàng)建通過靜態(tài)工廠方法創(chuàng)建產(chǎn)品產(chǎn)品 using System.Configuration; Chart chart;/讀取配置文件讀取配置文件string chartS
14、tr = ConfigurationManager.AppSettingschartType;chart = ChartFactory.GetChart(chartStr); /通過靜態(tài)工廠方法創(chuàng)建產(chǎn)品通過靜態(tài)工廠方法創(chuàng)建產(chǎn)品第18頁/共30頁第十八頁,共30頁。創(chuàng)建對象與使用(shyng)對象 C#語言創(chuàng)建對象的幾種方式 使用new關(guān)鍵字直接創(chuàng)建對象 通過反射(fnsh)機(jī)制創(chuàng)建對象 通過克隆方法創(chuàng)建對象 通過工廠類創(chuàng)建對象第19頁/共30頁第十九頁,共30頁。創(chuàng)建對象與使用(shyng)對象 實(shí)例(shl)分析 使用new關(guān)鍵字創(chuàng)建對象class Loginprivate UserDAO
15、udao;public Login() udao = new OracleUserDAO(); /創(chuàng)建對象創(chuàng)建對象public void Execute() /其他代碼udao.FindUserById(); /使用對象使用對象/其他代碼若改為SQLServerUserDAO必須修改源代碼,違背開閉(ki b)原則第20頁/共30頁第二十頁,共30頁。創(chuàng)建對象與使用(shyng)對象 實(shí)例(shl)分析 引入工廠類UserDAOFactory第21頁/共30頁第二十一頁,共30頁。創(chuàng)建對象與使用(shyng)對象 實(shí)例分析 引入工廠類UserDAOFactory 如果UserDAO的某個子類的
16、構(gòu)造函數(shù)發(fā)生改變(gibin)或者需要添加或移除不同的子類,只要維護(hù)UserDAOFactory的代碼,不會影響到Login 如果UserDAO的接口發(fā)生改變(gibin),例如添加、移除方法或改變(gibin)方法名,只需要修改Login,不會給UserDAOFactory帶來任何影響兩個類A和B之間的關(guān)系應(yīng)該僅僅是A創(chuàng)建B或者是A使用(shyng)B,而不能兩種關(guān)系都有。將對象的創(chuàng)建和使用(shyng)分離,使得系統(tǒng)更加符合單一職責(zé)原則,有利于對功能的復(fù)用和系統(tǒng)的維護(hù)。第22頁/共30頁第二十二頁,共30頁。創(chuàng)建對象與使用(shyng)對象 將對象的創(chuàng)建與使用分離的其他好處 防止用來實(shí)例化
17、一個類的數(shù)據(jù)(shj)和代碼在多個類中到處都是,可以將有關(guān)創(chuàng)建的知識搬移到一個工廠類中,解決代碼重復(fù)、創(chuàng)建蔓延的問題 構(gòu)造函數(shù)的名字都與類名相同,從構(gòu)造函數(shù)和參數(shù)列表中大家很難了解不同構(gòu)造函數(shù)所構(gòu)造的產(chǎn)品的差異 將對象的創(chuàng)建過程封裝在工廠類中,可以提供一系列名字完全不同的工廠方法,每一個工廠方法對應(yīng)一個構(gòu)造函數(shù),客戶端可以以一種更加可讀、易懂的方式來創(chuàng)建對象第23頁/共30頁第二十三頁,共30頁。創(chuàng)建對象與使用(shyng)對象 何時(h sh)不需要工廠? 無須為系統(tǒng)中的每一個類都配備一個工廠類 如果一個類很簡單,而且不存在太多變化,其構(gòu)造過程也很簡單,此時就無須為其提供工廠類,直接在使用之
18、前實(shí)例化即可 否則會導(dǎo)致工廠泛濫,增加系統(tǒng)的復(fù)雜度 例如:string類第24頁/共30頁第二十四頁,共30頁。簡單工廠(gngchng)模式的簡化 將抽象產(chǎn)品類和工廠(gngchng)類合并,將靜態(tài)工廠(gngchng)方法移至抽象產(chǎn)品類中第25頁/共30頁第二十五頁,共30頁。簡單工廠模式(msh)的優(yōu)缺點(diǎn)與適用環(huán)境 模式優(yōu)點(diǎn) 實(shí)現(xiàn)了對象(duxing)創(chuàng)建和使用的分離 客戶端無須知道所創(chuàng)建的具體產(chǎn)品類的類名,只需要知道具體產(chǎn)品類所對應(yīng)的參數(shù)即可 通過引入配置文件,可以在不修改任何客戶端代碼的情況下更換和增加新的具體產(chǎn)品類,在一定程度上提高了系統(tǒng)的靈活性第26頁/共30頁第二十六頁,共30頁。簡單工廠(gngchng)模式的優(yōu)缺點(diǎn)與適用環(huán)境 模式缺點(diǎn) 工廠類集中了所有產(chǎn)品的創(chuàng)建邏輯,職責(zé)過重,一旦(ydn)不能正常工作,整個系統(tǒng)都要受到影響 增加系統(tǒng)中類的個數(shù)(引入了新的工廠類)
溫馨提示
- 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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年全球及中國微流控臨床免疫分析儀行業(yè)頭部企業(yè)市場占有率及排名調(diào)研報告
- 2025年全球及中國生物降解無害化服務(wù)行業(yè)頭部企業(yè)市場占有率及排名調(diào)研報告
- 2025-2030全球B2B金屬清除劑行業(yè)調(diào)研及趨勢分析報告
- 23-24年項(xiàng)目管理人員安全培訓(xùn)考試題含答案【能力提升】
- 2023年-2024年安全教育培訓(xùn)試題附答案【綜合卷】
- 23-24年項(xiàng)目部安全培訓(xùn)考試題附解析答案
- 2023-2024年企業(yè)主要負(fù)責(zé)人安全培訓(xùn)考試題附完整答案【考點(diǎn)梳理】
- 2023年-2024年崗位安全教育培訓(xùn)試題附答案【輕巧奪冠】
- 23年-24年項(xiàng)目部治理人員安全培訓(xùn)考試題帶下載答案
- 礦石運(yùn)輸安全監(jiān)管承包協(xié)議
- 泵車述職報告
- 2024年山西文旅集團(tuán)招聘筆試參考題庫含答案解析
- 恢復(fù)中華人民共和國國籍申請表
- 管理期貨的趨勢跟蹤策略 尋找危機(jī)阿爾法
- 瀝青化學(xué)分析試驗(yàn)作業(yè)指導(dǎo)書
- 2023年大學(xué)物理化學(xué)實(shí)驗(yàn)報告化學(xué)電池溫度系數(shù)的測定
- 腦出血的護(hù)理課件腦出血護(hù)理查房PPT
- 南京大學(xué)-大學(xué)計算機(jī)信息技術(shù)教程-指導(dǎo)書
- 扣繳個人所得稅報告表-(Excel版)
- 02R112 拱頂油罐圖集
- Unit+4+History+and+Traditions單元整體教學(xué)設(shè)計課件 高中英語人教版(2019)必修第二冊單元整體教學(xué)設(shè)計
評論
0/150
提交評論