




版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、大綱(dgng)w 創(chuàng)建型模式w 簡(jiǎn)單工廠模式概述w 簡(jiǎn)單工廠模式的結(jié)構(gòu)與實(shí)現(xiàn)w 簡(jiǎn)單工廠模式的應(yīng)用(yngyng)實(shí)例w 創(chuàng)建對(duì)象與使用對(duì)象w 簡(jiǎn)單工廠模式的簡(jiǎn)化w 簡(jiǎn)單工廠模式的優(yōu)缺點(diǎn)與適用環(huán)境第1頁(yè)/共30頁(yè)第一頁(yè),共30頁(yè)。創(chuàng)建(chungjin)型模式 創(chuàng)建型模式(Creational Pattern)關(guān)注對(duì)象的創(chuàng)建過(guò)程 創(chuàng)建型模式對(duì)類(lèi)的實(shí)例化過(guò)程進(jìn)行了抽象,能夠?qū)④浖K中對(duì)象的創(chuàng)建和對(duì)象的使用分離,對(duì)用戶隱藏了類(lèi)的實(shí)例的創(chuàng)建細(xì)節(jié) 創(chuàng)建型模式描述如何將對(duì)象的創(chuàng)建和使用分離,讓用戶在使用對(duì)象時(shí)無(wú)須關(guān)心對(duì)象的創(chuàng)建細(xì)節(jié),從而降低系統(tǒng)的耦合度,讓設(shè)計(jì)方案更易于修改(xigi)和擴(kuò)展第2頁(yè)/
2、共30頁(yè)第二頁(yè),共30頁(yè)。創(chuàng)建(chungjin)型模式 創(chuàng)建(chungjin)型模式關(guān)注點(diǎn) 創(chuàng)建(chungjin)什么(What) 由誰(shuí)創(chuàng)建(chungjin)(Who) 何時(shí)創(chuàng)建(chungjin)(When)創(chuàng)建對(duì)象使用(shyng)對(duì)象第3頁(yè)/共30頁(yè)第三頁(yè),共30頁(yè)。創(chuàng)建(chungjin)型模式 創(chuàng)建(chungjin)型模式一覽表模式名稱(chēng)模式名稱(chēng)定定 義義學(xué)習(xí)難度學(xué)習(xí)難度使用頻率使用頻率簡(jiǎn)單工廠模式簡(jiǎn)單工廠模式(Simple Factory Pattern)定義一個(gè)工廠類(lèi),它可以根據(jù)參數(shù)定義一個(gè)工廠類(lèi),它可以根據(jù)參數(shù)的不同返回不同類(lèi)的實(shí)例,被創(chuàng)建的不同返回不同類(lèi)的實(shí)例,被創(chuàng)建
3、的實(shí)例通常都具有共同的父類(lèi)。的實(shí)例通常都具有共同的父類(lèi)。工廠方法模式工廠方法模式(Factory Method Pattern)定義一個(gè)用于創(chuàng)建對(duì)象的接口,但定義一個(gè)用于創(chuàng)建對(duì)象的接口,但是讓子類(lèi)決定將哪一個(gè)類(lèi)實(shí)例化。是讓子類(lèi)決定將哪一個(gè)類(lèi)實(shí)例化。工廠方法模式讓一個(gè)類(lèi)的實(shí)例化延工廠方法模式讓一個(gè)類(lèi)的實(shí)例化延遲到其子類(lèi)。遲到其子類(lèi)。抽象工廠模式抽象工廠模式(Abstract Factory Pattern)提供一個(gè)創(chuàng)建一系列相關(guān)或相互依提供一個(gè)創(chuàng)建一系列相關(guān)或相互依賴(lài)對(duì)象的接口,而無(wú)須指定它們具賴(lài)對(duì)象的接口,而無(wú)須指定它們具體的類(lèi)。體的類(lèi)。建造者模式建造者模式(Builder Pattern)將
4、一個(gè)復(fù)雜對(duì)象的構(gòu)建與它的表示將一個(gè)復(fù)雜對(duì)象的構(gòu)建與它的表示分離,使得同樣的構(gòu)建過(guò)程可以創(chuàng)分離,使得同樣的構(gòu)建過(guò)程可以創(chuàng)建不同的表示。建不同的表示。原型模式原型模式(Prototype Pattern)使用原型實(shí)例指定待創(chuàng)建對(duì)象的類(lèi)使用原型實(shí)例指定待創(chuàng)建對(duì)象的類(lèi)型,并且通過(guò)復(fù)制這個(gè)原型來(lái)創(chuàng)建型,并且通過(guò)復(fù)制這個(gè)原型來(lái)創(chuàng)建新的對(duì)象。新的對(duì)象。單例單例模式模式(Singleton Pattern)確保一個(gè)類(lèi)只有一個(gè)實(shí)例,并提供確保一個(gè)類(lèi)只有一個(gè)實(shí)例,并提供一個(gè)全局訪問(wèn)點(diǎn)來(lái)訪問(wèn)這個(gè)唯一實(shí)一個(gè)全局訪問(wèn)點(diǎn)來(lái)訪問(wèn)這個(gè)唯一實(shí)例。例。第4頁(yè)/共30頁(yè)第四頁(yè),共30頁(yè)。簡(jiǎn)單工廠(gngchng)模式概述簡(jiǎn)單工廠簡(jiǎn)
5、單工廠(gngchng)模式示意圖模式示意圖客戶端工廠(gngchng)產(chǎn)品參數(shù)第5頁(yè)/共30頁(yè)第五頁(yè),共30頁(yè)。簡(jiǎn)單工廠模式(msh)概述 簡(jiǎn)單工廠模式基本實(shí)現(xiàn)流程 具體產(chǎn)品類(lèi):將需要?jiǎng)?chuàng)建的各種不同產(chǎn)品對(duì)象的相關(guān)代碼封裝到具體產(chǎn)品類(lèi)中 抽象產(chǎn)品類(lèi):將具體產(chǎn)品類(lèi)公共的代碼進(jìn)行抽象和提取后封裝在一個(gè)抽象產(chǎn)品類(lèi)中 工廠類(lèi):提供一個(gè)工廠類(lèi)用于創(chuàng)建各種產(chǎn)品,在工廠類(lèi)中提供一個(gè)創(chuàng)建產(chǎn)品的工廠方法,該方法可以根據(jù)所傳入?yún)?shù)的不同創(chuàng)建不同的具體產(chǎn)品對(duì)象 客戶端:只需調(diào)用工廠類(lèi)的工廠方法并傳入相應(yīng)(xingyng)的參數(shù)即可得到一個(gè)產(chǎn)品對(duì)象第6頁(yè)/共30頁(yè)第六頁(yè),共30頁(yè)。簡(jiǎn)單(jindn)工廠模式概述 簡(jiǎn)單
6、工廠模式定義 類(lèi)創(chuàng)建(chungjin)型模式簡(jiǎn)單工廠模式簡(jiǎn)單工廠模式 (Simple Factory Pattern):定義一個(gè)工廠類(lèi),它可以根據(jù)參數(shù)的不同返回不同類(lèi)的實(shí)例根據(jù)參數(shù)的不同返回不同類(lèi)的實(shí)例,被創(chuàng)建的實(shí)例通常都具有共同的父類(lèi)具有共同的父類(lèi)。第7頁(yè)/共30頁(yè)第七頁(yè),共30頁(yè)。簡(jiǎn)單(jindn)工廠模式概述 簡(jiǎn)單工廠模式定義 在簡(jiǎn)單工廠模式中用于創(chuàng)建實(shí)例的方法通常是靜態(tài)( jngti)(static)方法,因此又被稱(chēng)為靜態(tài)( jngti)工廠方法(Static Factory Method)模式 要點(diǎn):如果需要什么,只需要傳入一個(gè)正確的參數(shù),就可以獲取所需要的對(duì)象,而無(wú)須知道其創(chuàng)建細(xì)
7、節(jié)第8頁(yè)/共30頁(yè)第八頁(yè),共30頁(yè)。簡(jiǎn)單工廠模式的結(jié)構(gòu)(jigu)與實(shí)現(xiàn) 簡(jiǎ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頁(yè)/共30頁(yè)第九頁(yè),共30頁(yè)。簡(jiǎn)單工廠模式(msh)的結(jié)構(gòu)與實(shí)現(xiàn) 簡(jiǎn)單工廠模式(msh)結(jié)構(gòu) 簡(jiǎn)單工廠模式(msh)包
8、含如下3個(gè)角色: Factory(工廠角色) Product(抽象產(chǎn)品角色) ConcreteProduct(具體產(chǎn)品角色)第10頁(yè)/共30頁(yè)第十頁(yè),共30頁(yè)。簡(jiǎn)單工廠模式的結(jié)構(gòu)(jigu)與實(shí)現(xiàn) 簡(jiǎn)單工廠模式實(shí)現(xiàn) 典型的抽象產(chǎn)品(chnpn)類(lèi)代碼:abstract class Product /所有產(chǎn)品類(lèi)的公共業(yè)務(wù)方法所有產(chǎn)品類(lèi)的公共業(yè)務(wù)方法public void MethodSame() /公共方法的實(shí)現(xiàn)公共方法的實(shí)現(xiàn)/聲明抽象業(yè)務(wù)方法聲明抽象業(yè)務(wù)方法public abstract void MethodDiff();第11頁(yè)/共30頁(yè)第十一頁(yè),共30頁(yè)。簡(jiǎn)單工廠模式(msh)的結(jié)構(gòu)與實(shí)
9、現(xiàn) 簡(jiǎn)單工廠模式實(shí)現(xiàn) 典型的具體產(chǎn)品(chnpn)類(lèi)代碼: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頁(yè)/共30頁(yè)第十二頁(yè),共30頁(yè)。簡(jiǎn)單(jindn)工廠模式的結(jié)構(gòu)與實(shí)現(xiàn) 簡(jiǎn)單工廠模式實(shí)現(xiàn) 典型(dinxng)的工廠類(lèi)代碼: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頁(yè)/共30頁(yè)第十三頁(yè),共30頁(yè)。簡(jiǎn)單工廠模式(msh)的結(jié)構(gòu)與實(shí)現(xiàn) 簡(jiǎn)單( jindn)工廠模式實(shí)現(xiàn) 典型的客戶端代碼:class Program static void Main(string args) Product product; product = Factory.GetProd
11、uct(A); /通過(guò)工廠類(lèi)創(chuàng)建產(chǎn)品對(duì)象通過(guò)工廠類(lèi)創(chuàng)建產(chǎn)品對(duì)象 product.MethodSame(); product.MethodDiff(); 第14頁(yè)/共30頁(yè)第十四頁(yè),共30頁(yè)。簡(jiǎn)單工廠(gngchng)模式的應(yīng)用實(shí)例 實(shí)例(shl)說(shuō)明某軟件公司要基于C#語(yǔ)言開(kāi)發(fā)一套圖表庫(kù),該圖表庫(kù)可以為應(yīng)用系統(tǒng)提供多種不同外觀的圖表,例如柱狀圖(HistogramChart)、餅狀圖(PieChart)、折線圖(LineChart)等。該軟件公司圖表庫(kù)設(shè)計(jì)人員希望為應(yīng)用系統(tǒng)開(kāi)發(fā)人員提供一套靈活易用的圖表庫(kù),通過(guò)設(shè)置不同的參數(shù)即可得到不同類(lèi)型的圖表,而且可以較為方便地對(duì)圖表庫(kù)進(jìn)行擴(kuò)展,以便能夠在
12、將來(lái)增加一些新類(lèi)型的圖表?,F(xiàn)使用簡(jiǎn)單工廠模式來(lái)設(shè)計(jì)該圖表庫(kù)。第15頁(yè)/共30頁(yè)第十五頁(yè),共30頁(yè)。簡(jiǎn)單工廠模式的應(yīng)用(yngyng)實(shí)例 實(shí)例(shl)類(lèi)圖圖表(tbio)庫(kù)結(jié)構(gòu)圖第16頁(yè)/共30頁(yè)第十六頁(yè),共30頁(yè)。簡(jiǎn)單工廠(gngchng)模式的應(yīng)用實(shí)例 實(shí)例代碼 (1) Chart:抽象圖表接口,充當(dāng)(chngdng)抽象產(chǎn)品類(lèi) (2) HistogramChart:柱狀圖類(lèi),充當(dāng)(chngdng)具體產(chǎn)品類(lèi) (3) PieChart:餅狀圖類(lèi),充當(dāng)(chngdng)具體產(chǎn)品類(lèi) (4) LineChart:折線圖類(lèi),充當(dāng)(chngdng)具體產(chǎn)品類(lèi) (5) ChartFactory:圖表
13、工廠類(lèi),充當(dāng)(chngdng)工廠類(lèi) (6) Program:客戶端測(cè)試類(lèi)演示演示參考參考(cnko)代碼代碼 (DesignPatternSimpleFactory)第17頁(yè)/共30頁(yè)第十七頁(yè),共30頁(yè)。簡(jiǎn)單工廠模式的應(yīng)用(yngyng)實(shí)例 結(jié)果( ji gu)及分析 引入配置文件:App.configChart chart;chart = ChartFactory.GetChart(histogram); /通過(guò)靜態(tài)工廠方法創(chuàng)建通過(guò)靜態(tài)工廠方法創(chuàng)建產(chǎn)品產(chǎn)品 using System.Configuration; Chart chart;/讀取配置文件讀取配置文件string chartS
14、tr = ConfigurationManager.AppSettingschartType;chart = ChartFactory.GetChart(chartStr); /通過(guò)靜態(tài)工廠方法創(chuàng)建產(chǎn)品通過(guò)靜態(tài)工廠方法創(chuàng)建產(chǎn)品第18頁(yè)/共30頁(yè)第十八頁(yè),共30頁(yè)。創(chuàng)建對(duì)象與使用(shyng)對(duì)象 C#語(yǔ)言創(chuàng)建對(duì)象的幾種方式 使用new關(guān)鍵字直接創(chuàng)建對(duì)象 通過(guò)反射(fnsh)機(jī)制創(chuàng)建對(duì)象 通過(guò)克隆方法創(chuàng)建對(duì)象 通過(guò)工廠類(lèi)創(chuàng)建對(duì)象第19頁(yè)/共30頁(yè)第十九頁(yè),共30頁(yè)。創(chuàng)建對(duì)象與使用(shyng)對(duì)象 實(shí)例(shl)分析 使用new關(guān)鍵字創(chuàng)建對(duì)象class Loginprivate UserDAO
15、udao;public Login() udao = new OracleUserDAO(); /創(chuàng)建對(duì)象創(chuàng)建對(duì)象public void Execute() /其他代碼udao.FindUserById(); /使用對(duì)象使用對(duì)象/其他代碼若改為SQLServerUserDAO必須修改源代碼,違背開(kāi)閉(ki b)原則第20頁(yè)/共30頁(yè)第二十頁(yè),共30頁(yè)。創(chuàng)建對(duì)象與使用(shyng)對(duì)象 實(shí)例(shl)分析 引入工廠類(lèi)UserDAOFactory第21頁(yè)/共30頁(yè)第二十一頁(yè),共30頁(yè)。創(chuàng)建對(duì)象與使用(shyng)對(duì)象 實(shí)例分析 引入工廠類(lèi)UserDAOFactory 如果UserDAO的某個(gè)子類(lèi)的
16、構(gòu)造函數(shù)發(fā)生改變(gibin)或者需要添加或移除不同的子類(lèi),只要維護(hù)UserDAOFactory的代碼,不會(huì)影響到Login 如果UserDAO的接口發(fā)生改變(gibin),例如添加、移除方法或改變(gibin)方法名,只需要修改Login,不會(huì)給UserDAOFactory帶來(lái)任何影響兩個(gè)類(lèi)A和B之間的關(guān)系應(yīng)該僅僅是A創(chuàng)建B或者是A使用(shyng)B,而不能兩種關(guān)系都有。將對(duì)象的創(chuàng)建和使用(shyng)分離,使得系統(tǒng)更加符合單一職責(zé)原則,有利于對(duì)功能的復(fù)用和系統(tǒng)的維護(hù)。第22頁(yè)/共30頁(yè)第二十二頁(yè),共30頁(yè)。創(chuàng)建對(duì)象與使用(shyng)對(duì)象 將對(duì)象的創(chuàng)建與使用分離的其他好處 防止用來(lái)實(shí)例化
17、一個(gè)類(lèi)的數(shù)據(jù)(shj)和代碼在多個(gè)類(lèi)中到處都是,可以將有關(guān)創(chuàng)建的知識(shí)搬移到一個(gè)工廠類(lèi)中,解決代碼重復(fù)、創(chuàng)建蔓延的問(wèn)題 構(gòu)造函數(shù)的名字都與類(lèi)名相同,從構(gòu)造函數(shù)和參數(shù)列表中大家很難了解不同構(gòu)造函數(shù)所構(gòu)造的產(chǎn)品的差異 將對(duì)象的創(chuàng)建過(guò)程封裝在工廠類(lèi)中,可以提供一系列名字完全不同的工廠方法,每一個(gè)工廠方法對(duì)應(yīng)一個(gè)構(gòu)造函數(shù),客戶端可以以一種更加可讀、易懂的方式來(lái)創(chuàng)建對(duì)象第23頁(yè)/共30頁(yè)第二十三頁(yè),共30頁(yè)。創(chuàng)建對(duì)象與使用(shyng)對(duì)象 何時(shí)(h sh)不需要工廠? 無(wú)須為系統(tǒng)中的每一個(gè)類(lèi)都配備一個(gè)工廠類(lèi) 如果一個(gè)類(lèi)很簡(jiǎn)單,而且不存在太多變化,其構(gòu)造過(guò)程也很簡(jiǎn)單,此時(shí)就無(wú)須為其提供工廠類(lèi),直接在使用之
18、前實(shí)例化即可 否則會(huì)導(dǎo)致工廠泛濫,增加系統(tǒng)的復(fù)雜度 例如:string類(lèi)第24頁(yè)/共30頁(yè)第二十四頁(yè),共30頁(yè)。簡(jiǎn)單工廠(gngchng)模式的簡(jiǎn)化 將抽象產(chǎn)品類(lèi)和工廠(gngchng)類(lèi)合并,將靜態(tài)工廠(gngchng)方法移至抽象產(chǎn)品類(lèi)中第25頁(yè)/共30頁(yè)第二十五頁(yè),共30頁(yè)。簡(jiǎn)單工廠模式(msh)的優(yōu)缺點(diǎn)與適用環(huán)境 模式優(yōu)點(diǎn) 實(shí)現(xiàn)了對(duì)象(duxing)創(chuàng)建和使用的分離 客戶端無(wú)須知道所創(chuàng)建的具體產(chǎn)品類(lèi)的類(lèi)名,只需要知道具體產(chǎn)品類(lèi)所對(duì)應(yīng)的參數(shù)即可 通過(guò)引入配置文件,可以在不修改任何客戶端代碼的情況下更換和增加新的具體產(chǎn)品類(lèi),在一定程度上提高了系統(tǒng)的靈活性第26頁(yè)/共30頁(yè)第二十六頁(yè),共30頁(yè)。簡(jiǎn)單工廠(gngchng)模式的優(yōu)缺點(diǎn)與適用環(huán)境 模式缺點(diǎn) 工廠類(lèi)集中了所有產(chǎn)品的創(chuàng)建邏輯,職責(zé)過(guò)重,一旦(ydn)不能正常工作,整個(gè)系統(tǒng)都要受到影響 增加系統(tǒng)中類(lèi)的個(gè)數(shù)(引入了新的工廠類(lèi))
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 麗水郵政考試試題及答案
- 電工現(xiàn)代技術(shù)考試試題及答案
- 2024-2025學(xué)年廣東省中山市共進(jìn)聯(lián)盟七年級(jí)(下)期中歷史試卷
- 初中地理《美國(guó)》教學(xué)設(shè)計(jì)第1課時(shí)-2024-2025學(xué)年湘教版地理七年級(jí)下冊(cè)
- 學(xué)生普法考試試題及答案
- 新公司員工手冊(cè)范本
- 陜西省咸陽(yáng)市實(shí)驗(yàn)中學(xué)2022-2023學(xué)年高一下學(xué)期第二次月考試題 生物 含解析
- 2025年全球市場(chǎng)電子級(jí)氟化甲烷 GIR3480中文總體規(guī)模、主要生產(chǎn)商、主要地區(qū)、產(chǎn)品和應(yīng)用細(xì)分研究報(bào)告
- 2023屆四川省綿陽(yáng)市高三第二次診斷性考試(二模)理綜生物含解析
- 二年級(jí)數(shù)學(xué)第二學(xué)期期末考試卷(北師版)
- 無(wú)人機(jī)操控 教學(xué)設(shè)計(jì)公開(kāi)課教案教學(xué)設(shè)計(jì)課件
- 2024 年普通高等學(xué)校招生全國(guó)統(tǒng)一考試新課標(biāo) I 卷-數(shù)學(xué)試卷-全國(guó)
- 《瑞幸咖啡財(cái)務(wù)造假案例分析》8400字(論文)
- 安全生產(chǎn)法律法規(guī)注冊(cè)安全工程師考試(初級(jí))試題與參考答案(2024年)一
- (試卷)2024貴州省初中學(xué)業(yè)水平考試·物理
- 云南省職業(yè)技能大賽(健康照護(hù)賽項(xiàng))理論參考試題及答案
- 自然辯證法論述題146題帶答案(可打印版)
- DB43T 2534-2022 電力氣象服務(wù)技術(shù)規(guī)范
- 工程合伙人協(xié)議書(shū)范文模板下載電子版
- 體育賽事組織策劃及執(zhí)行方案手冊(cè)
- 中醫(yī)藥適宜技術(shù)推廣實(shí)施方案(3篇)
評(píng)論
0/150
提交評(píng)論