




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、www.ChinaSA.infoDesign Patterns簡單工廠模式簡單工廠模式劉劉 偉偉 (Sunny)www.ChinaSA.info大綱w 創(chuàng)建型模式w 簡單工廠模式概述w 簡單工廠模式的結(jié)構(gòu)與實(shí)現(xiàn)w 簡單工廠模式的應(yīng)用實(shí)例w 創(chuàng)建對(duì)象與使用對(duì)象w 簡單工廠模式的簡化w 簡單工廠模式的優(yōu)缺點(diǎn)與適用環(huán)境www.ChinaSA.info創(chuàng)建型模式w 創(chuàng)建型模式創(chuàng)建型模式(Creational Pattern)關(guān)注對(duì)象的創(chuàng)建過程w 創(chuàng)建型模式對(duì)類的實(shí)例化過程進(jìn)行了抽象,能夠?qū)④浖K中對(duì)象的創(chuàng)建和對(duì)象的使用分離,對(duì)用戶隱藏了類的實(shí)例的創(chuàng)建細(xì)節(jié)w 創(chuàng)建型模式描述如何將對(duì)象的創(chuàng)建和使用分離,
2、讓用戶在使用對(duì)象時(shí)無須關(guān)心對(duì)象的創(chuàng)建細(xì)節(jié),從而降低系統(tǒng)的耦合度,讓設(shè)計(jì)方案更易于修改和擴(kuò)展www.ChinaSA.info創(chuàng)建型模式w 創(chuàng)建型模式關(guān)注點(diǎn)創(chuàng)建什么創(chuàng)建什么(What)由誰創(chuàng)建由誰創(chuàng)建(Who)何時(shí)創(chuàng)建何時(shí)創(chuàng)建(When)創(chuàng)建對(duì)象創(chuàng)建對(duì)象使用對(duì)象使用對(duì)象www.ChinaSA.info創(chuàng)建型模式w 創(chuàng)建型模式一覽表模式名稱模式名稱定定 義義學(xué)習(xí)難度學(xué)習(xí)難度使用頻率使用頻率簡單工廠模式簡單工廠模式(Simple Factory Pattern)定義一個(gè)工廠類,它可以根據(jù)參數(shù)定義一個(gè)工廠類,它可以根據(jù)參數(shù)的不同返回不同類的實(shí)例,被創(chuàng)建的不同返回不同類的實(shí)例,被創(chuàng)建的實(shí)例通常都具有共同的
3、父類。的實(shí)例通常都具有共同的父類。工廠方法模式工廠方法模式(Factory Method Pattern)定義一個(gè)用于創(chuàng)建對(duì)象的接口,但定義一個(gè)用于創(chuàng)建對(duì)象的接口,但是讓子類決定將哪一個(gè)類實(shí)例化。是讓子類決定將哪一個(gè)類實(shí)例化。工廠方法模式讓一個(gè)類的實(shí)例化延工廠方法模式讓一個(gè)類的實(shí)例化延遲到其子類。遲到其子類。抽象工廠模式抽象工廠模式(Abstract Factory Pattern)提供一個(gè)創(chuàng)建一系列相關(guān)或相互依提供一個(gè)創(chuàng)建一系列相關(guān)或相互依賴對(duì)象的接口,而無須指定它們具賴對(duì)象的接口,而無須指定它們具體的類。體的類。建造者模式建造者模式(Builder Pattern)將一個(gè)復(fù)雜對(duì)象的構(gòu)建與它
4、的表示將一個(gè)復(fù)雜對(duì)象的構(gòu)建與它的表示分離,使得同樣的構(gòu)建過程可以創(chuàng)分離,使得同樣的構(gòu)建過程可以創(chuàng)建不同的表示。建不同的表示。原型模式原型模式(Prototype Pattern)使用原型實(shí)例指定待創(chuàng)建對(duì)象的類使用原型實(shí)例指定待創(chuàng)建對(duì)象的類型,并且通過復(fù)制這個(gè)原型來創(chuàng)建型,并且通過復(fù)制這個(gè)原型來創(chuàng)建新的對(duì)象。新的對(duì)象。單例模式單例模式(Singleton Pattern)確保一個(gè)類只有一個(gè)實(shí)例,并提供確保一個(gè)類只有一個(gè)實(shí)例,并提供一個(gè)全局訪問點(diǎn)來訪問這個(gè)唯一實(shí)一個(gè)全局訪問點(diǎn)來訪問這個(gè)唯一實(shí)例。例。www.ChinaSA.info簡單工廠模式概述簡單工廠模式示意圖簡單工廠模式示意圖客戶端客戶端工廠
5、工廠產(chǎn)品產(chǎn)品參數(shù)參數(shù)www.ChinaSA.info簡單工廠模式概述w 簡單工廠模式基本實(shí)現(xiàn)流程 具體產(chǎn)品類:具體產(chǎn)品類:將需要?jiǎng)?chuàng)建的各種不同產(chǎn)品對(duì)象的相關(guān)代碼封裝到將需要?jiǎng)?chuàng)建的各種不同產(chǎn)品對(duì)象的相關(guān)代碼封裝到具體產(chǎn)品類中具體產(chǎn)品類中 抽象產(chǎn)品類:抽象產(chǎn)品類:將具體產(chǎn)品類公共的代碼進(jìn)行抽象和提取后封裝在將具體產(chǎn)品類公共的代碼進(jìn)行抽象和提取后封裝在一個(gè)抽象產(chǎn)品類中一個(gè)抽象產(chǎn)品類中 工廠類:工廠類:提供一個(gè)工廠類用于創(chuàng)建各種產(chǎn)品,在工廠類中提供一提供一個(gè)工廠類用于創(chuàng)建各種產(chǎn)品,在工廠類中提供一個(gè)創(chuàng)建產(chǎn)品的工廠方法,該方法可以根據(jù)所傳入?yún)?shù)的不同創(chuàng)建個(gè)創(chuàng)建產(chǎn)品的工廠方法,該方法可以根據(jù)所傳入?yún)?shù)的不
6、同創(chuàng)建不同的具體產(chǎn)品對(duì)象不同的具體產(chǎn)品對(duì)象 客戶端:客戶端:只需調(diào)用工廠類的工廠方法并傳入相應(yīng)的參數(shù)即可得到只需調(diào)用工廠類的工廠方法并傳入相應(yīng)的參數(shù)即可得到一個(gè)產(chǎn)品對(duì)象一個(gè)產(chǎn)品對(duì)象if(arg.Equals(A) return new ConcreteProductA();else if(arg.Equals(B) return new ConcreteProductB();else .www.ChinaSA.info簡單工廠模式概述w 簡單工廠模式定義類創(chuàng)建型類創(chuàng)建型模式模式簡單工廠模式簡單工廠模式 (Simple Factory Pattern):定義一個(gè)工廠類,它可以根據(jù)參數(shù)的不同返回不
7、同類的實(shí)例根據(jù)參數(shù)的不同返回不同類的實(shí)例,被創(chuàng)建的實(shí)例通常都具有共同的父類具有共同的父類。www.ChinaSA.info簡單工廠模式概述w 簡單工廠模式定義在簡單工廠模式中用于創(chuàng)建實(shí)例的方法通常是在簡單工廠模式中用于創(chuàng)建實(shí)例的方法通常是靜態(tài)靜態(tài)(static)方法方法,因此又被稱為,因此又被稱為靜態(tài)工廠方法靜態(tài)工廠方法(Static Factory Method)模式模式要點(diǎn):要點(diǎn):如果需要什么,如果需要什么,只需要傳入一個(gè)正確的參數(shù),只需要傳入一個(gè)正確的參數(shù),就可以獲取所需要的對(duì)象就可以獲取所需要的對(duì)象,而,而無須知道其創(chuàng)建細(xì)節(jié)無須知道其創(chuàng)建細(xì)節(jié)www.ChinaSA.info簡單工廠模式
8、的結(jié)構(gòu)與實(shí)現(xiàn)w 簡單工廠模式結(jié)構(gòu)if(arg.Equals(A) return new ConcreteProductA();else if(arg.Equals(B) return new ConcreteProductB();else .ConcreteProductAProductFactory+ FactoryMethod (string arg).: ProductConcreteProductBwww.ChinaSA.info簡單工廠模式的結(jié)構(gòu)與實(shí)現(xiàn)w 簡單工廠模式結(jié)構(gòu)簡單工廠模式包含如下簡單工廠模式包含如下3個(gè)角色:個(gè)角色: Factory(工廠角色) Product(抽象產(chǎn)品角
9、色) ConcreteProduct(具體產(chǎn)品角色)www.ChinaSA.info簡單工廠模式的結(jié)構(gòu)與實(shí)現(xiàn)w 簡單工廠模式實(shí)現(xiàn)典型的抽象產(chǎn)品類代碼:典型的抽象產(chǎn)品類代碼: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();www.ChinaSA.info簡單工廠模式的結(jié)構(gòu)與實(shí)現(xiàn)w 簡單工廠模式實(shí)現(xiàn)典型的具體產(chǎn)品類代碼:典型的具體產(chǎn)品類代碼:class ConcreteP
10、roductA : 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) www.ChinaSA.info簡單工廠模式的結(jié)構(gòu)與實(shí)現(xiàn)w 簡單工廠模式實(shí)現(xiàn)典型的工廠類代碼:典型的工廠類代碼:class Factory /靜態(tài)工廠方法靜態(tài)工廠方法 public static Product GetProduct(string arg) Product product = null; if (arg.Equals(A) product = new ConcreteProductA(); /初始化設(shè)置初始化設(shè)置pr
11、oduct else if (arg.Equals(B) product = new ConcreteProductB(); /初始化設(shè)置初始化設(shè)置product return product; www.ChinaSA.info簡單工廠模式的結(jié)構(gòu)與實(shí)現(xiàn)w 簡單工廠模式實(shí)現(xiàn)典型的客戶端代碼:典型的客戶端代碼:class Program static void Main(string args) Product product; product = Factory.GetProduct(A); /通過工廠類創(chuàng)建產(chǎn)品對(duì)象通過工廠類創(chuàng)建產(chǎn)品對(duì)象 product.MethodSame(); produc
12、t.MethodDiff(); www.ChinaSA.info簡單工廠模式的應(yīng)用實(shí)例w 實(shí)例說明某軟件公司要基于C#語言開發(fā)一套圖表庫,該圖表庫可以為應(yīng)用系統(tǒng)提供多種不同外觀的圖表,例如柱狀圖(HistogramChart)、餅狀圖(PieChart)、折線圖(LineChart)等。該軟件公司圖表庫設(shè)計(jì)人員希望為應(yīng)用系統(tǒng)開發(fā)人員提供一套靈活易用的圖表庫,通過設(shè)置不同的參數(shù)即可得到不同類型的圖表,而且可以較為方便地對(duì)圖表庫進(jìn)行擴(kuò)展,以便能夠在將來增加一些新類型的圖表?,F(xiàn)使用簡單工廠模式來設(shè)計(jì)該圖表庫。www.ChinaSA.info簡單工廠模式的應(yīng)用實(shí)例w 實(shí)例類圖圖表庫結(jié)構(gòu)圖圖表庫結(jié)構(gòu)圖H
13、istogramChart+HistogramChart ()Display ().: voidChart+ Display ().: voidLineChart+LineChart ()Display ().: voidPieChart+PieChart ()Display ().: voidChartFactory+ GetChart (string type).: Chartwww.ChinaSA.info簡單工廠模式的應(yīng)用實(shí)例w 實(shí)例代碼 (1) Chart:抽象圖表接口,充當(dāng)抽象產(chǎn)品類:抽象圖表接口,充當(dāng)抽象產(chǎn)品類 (2) HistogramChart:柱狀圖類,充當(dāng)具體產(chǎn)品類:柱狀
14、圖類,充當(dāng)具體產(chǎn)品類 (3) PieChart:餅狀圖類,充當(dāng)具體產(chǎn)品類:餅狀圖類,充當(dāng)具體產(chǎn)品類 (4) LineChart:折線圖類,充當(dāng)具體產(chǎn)品類:折線圖類,充當(dāng)具體產(chǎn)品類 (5) ChartFactory:圖表工廠類,充當(dāng)工廠類:圖表工廠類,充當(dāng)工廠類 (6) Program:客戶端測試類:客戶端測試類演示演示參考代碼參考代碼 (DesignPatternSimpleFactory)www.ChinaSA.info簡單工廠模式的應(yīng)用實(shí)例w 結(jié)果及分析引入引入配置文件配置文件:App.configChart chart;chart = ChartFactory.GetChart(hist
15、ogram); /通過靜態(tài)工廠方法創(chuàng)建產(chǎn)品通過靜態(tài)工廠方法創(chuàng)建產(chǎn)品 using System.Configuration; Chart chart;/讀取配置文件讀取配置文件string chartStr = ConfigurationManager.AppSettingschartType;chart = ChartFactory.GetChart(chartStr); /通過靜態(tài)工廠方法創(chuàng)建產(chǎn)品通過靜態(tài)工廠方法創(chuàng)建產(chǎn)品www.ChinaSA.info創(chuàng)建對(duì)象與使用對(duì)象w C#語言創(chuàng)建對(duì)象的幾種方式使用使用new關(guān)鍵字關(guān)鍵字直接創(chuàng)建對(duì)象直接創(chuàng)建對(duì)象通過通過反射機(jī)制反射機(jī)制創(chuàng)建對(duì)象創(chuàng)建對(duì)象通過
16、通過克隆方法克隆方法創(chuàng)建對(duì)象創(chuàng)建對(duì)象通過通過工廠類工廠類創(chuàng)建對(duì)象創(chuàng)建對(duì)象www.ChinaSA.info創(chuàng)建對(duì)象與使用對(duì)象w 實(shí)例分析使用使用new關(guān)鍵字創(chuàng)建對(duì)象關(guān)鍵字創(chuàng)建對(duì)象class Loginprivate UserDAO udao;public Login() udao = new OracleUserDAO(); /創(chuàng)建對(duì)象創(chuàng)建對(duì)象public void Execute() /其他代碼udao.FindUserById(); /使用對(duì)象使用對(duì)象/其他代碼若改為若改為SQLServerUserDAO必必須修改源代碼,違背開閉原則須修改源代碼,違背開閉原則www.ChinaSA.info
17、創(chuàng)建對(duì)象與使用對(duì)象w 實(shí)例分析引入工廠類引入工廠類UserDAOFactoryLogin- udao : UserDAO +Login (int arg)Execute ().: voidUserDAO+ FindUserById ().: voidOracleUserDAO+ FindUserById ().: voidSQLServerUserDAO+ FindUserById ().: voidUserDAOFactory+ CreateUserDAO (int arg).: UserDAOudao = UserDAOFactory.CreateUserDAO(arg);if (arg
18、= 0) return new OracleUserDAO();else return new SQLServerUserDAO();udao.FindUserById();www.ChinaSA.info創(chuàng)建對(duì)象與使用對(duì)象w 實(shí)例分析引入工廠類引入工廠類UserDAOFactory 如果UserDAO的某個(gè)子類的構(gòu)造函數(shù)發(fā)生改變或者需要添加或移除不同的子類,只要維護(hù)UserDAOFactory的代碼,不會(huì)影響到Login 如果UserDAO的接口發(fā)生改變,例如添加、移除方法或改變方法名,只需要修改Login,不會(huì)給UserDAOFactory帶來任何影響兩個(gè)類A和B之間的關(guān)系應(yīng)該僅僅是A創(chuàng)建
19、B或者是A使用B,而不能兩種關(guān)系都有。將對(duì)象的創(chuàng)建和使用分離,使得系統(tǒng)更加符合單一職責(zé)原則,有利于對(duì)功能的復(fù)用和系統(tǒng)的維護(hù)。www.ChinaSA.info創(chuàng)建對(duì)象與使用對(duì)象w 將對(duì)象的創(chuàng)建與使用分離的其他好處 防止用來實(shí)例化一個(gè)類的數(shù)據(jù)和代碼在多個(gè)類中到處都是防止用來實(shí)例化一個(gè)類的數(shù)據(jù)和代碼在多個(gè)類中到處都是,可以將有關(guān)創(chuàng)建的知識(shí)搬移到一個(gè)工廠類中,可以將有關(guān)創(chuàng)建的知識(shí)搬移到一個(gè)工廠類中,解決代碼重復(fù)、解決代碼重復(fù)、創(chuàng)建蔓延的問題創(chuàng)建蔓延的問題 構(gòu)造函數(shù)的名字都與類名相同,從構(gòu)造函數(shù)和參數(shù)列表中大構(gòu)造函數(shù)的名字都與類名相同,從構(gòu)造函數(shù)和參數(shù)列表中大家很難了解不同構(gòu)造函數(shù)所構(gòu)造的產(chǎn)品的差異家很
20、難了解不同構(gòu)造函數(shù)所構(gòu)造的產(chǎn)品的差異 將對(duì)象的將對(duì)象的創(chuàng)建過程封裝在工廠類中,可以創(chuàng)建過程封裝在工廠類中,可以提供一系列名字完全不同的提供一系列名字完全不同的工廠方法,每一個(gè)工廠方法對(duì)應(yīng)一個(gè)構(gòu)造函數(shù)工廠方法,每一個(gè)工廠方法對(duì)應(yīng)一個(gè)構(gòu)造函數(shù),客戶端可以,客戶端可以以一種更加可讀、易懂的方式來創(chuàng)建對(duì)象以一種更加可讀、易懂的方式來創(chuàng)建對(duì)象Rectangle+Rectangle (int width, int height)Rectangle (int width).RectangleFactory+CreateRectangle (int width, int height)CreateSquare
21、 (int width).: Rectangle: Rectangle創(chuàng) 建 長 方 形 對(duì) 象創(chuàng) 建 正 方 形 對(duì) 象www.ChinaSA.info創(chuàng)建對(duì)象與使用對(duì)象w 何時(shí)不需要工廠?無須為系統(tǒng)中的每一個(gè)類都配備一個(gè)工廠類無須為系統(tǒng)中的每一個(gè)類都配備一個(gè)工廠類如果一個(gè)類很簡單,而且如果一個(gè)類很簡單,而且不存在太多變化不存在太多變化,其構(gòu)造過其構(gòu)造過程也很簡單程也很簡單,此時(shí)就無須為其提供工廠類,直接在使,此時(shí)就無須為其提供工廠類,直接在使用之前實(shí)例化即可用之前實(shí)例化即可否則會(huì)導(dǎo)致工廠泛濫,增加系統(tǒng)的復(fù)雜度否則會(huì)導(dǎo)致工廠泛濫,增加系統(tǒng)的復(fù)雜度例如:例如:string類類www.ChinaSA.info簡單工廠模式的簡化w 將抽象產(chǎn)品類和工廠類合并,將靜態(tài)工廠方法移至抽象產(chǎn)品類中ConcreteProductAProduct+ FactoryMethod (string arg).: ProductConcreteProductBwww.ChinaSA.info簡單工廠模式的優(yōu)缺點(diǎn)與適用環(huán)境w 模式優(yōu)點(diǎn)實(shí)現(xiàn)了實(shí)現(xiàn)了對(duì)
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(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ǔ)空間,僅對(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 七年級(jí)下冊(cè)英語教師培訓(xùn)計(jì)劃
- 四年級(jí)英語語法專項(xiàng)提升計(jì)劃
- 科技公司實(shí)習(xí)生綜合素質(zhì)提升計(jì)劃
- 一年級(jí)下學(xué)期數(shù)學(xué)競賽活動(dòng)計(jì)劃
- 2025醫(yī)院醫(yī)療服務(wù)提升計(jì)劃
- 心理咨詢中心心理健康教育工作計(jì)劃
- 人教版八年級(jí)物理課程安排計(jì)劃
- 2025學(xué)年人教版小學(xué)語文五年級(jí)下冊(cè)課外拓展計(jì)劃
- 五年級(jí)語文復(fù)習(xí)策略與計(jì)劃
- 藝術(shù)類輔導(dǎo)機(jī)構(gòu)年度發(fā)展計(jì)劃
- “危大工程”驗(yàn)收標(biāo)識(shí)牌
- 人民幣的故事(課堂PPT)
- 生產(chǎn)異常及停線管理規(guī)范(1)
- 學(xué)生英語讀寫情況調(diào)查分析報(bào)告(二)
- 河北工業(yè)大學(xué)本科生體育課程考核管理辦法-河北工業(yè)大學(xué)本科生院
- 林木銷售合同
- 病房發(fā)生火災(zāi)應(yīng)急預(yù)案
- 熱學(xué)李椿__電子
- 煤倉安全管理規(guī)范標(biāo)準(zhǔn)
- 適配器安裝、使用、調(diào)試說明
- 施工現(xiàn)場事故應(yīng)急預(yù)案處理程序
評(píng)論
0/150
提交評(píng)論