資源描述:
《NET設(shè)計(jì)模式(1) 簡單工廠模式.ppt》由會員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在行業(yè)資料-天天文庫。
1、NET設(shè)計(jì)模式(1):簡單工廠模式簡單工廠模式介紹:簡單工廠模式不能說是一個(gè)設(shè)計(jì)模式,說它是一種編程習(xí)慣可能更恰當(dāng)些。因?yàn)樗辽俨皇荊of23種設(shè)計(jì)模式之一。但它在實(shí)際的編程中經(jīng)常被用到,而且思想也非常簡單,可以說是工廠方法模式的一個(gè)引導(dǎo),所以我想有必要把它作為第一個(gè)講一下。簡單工廠模式引入:我們在編程的時(shí)候,每當(dāng)“new”一個(gè)對象之后,這個(gè)對象就依賴于這個(gè)類了。如果在后期的維護(hù)過程中由于某些原因需要修改一下這個(gè)類,則唯一的做法就是打開源代碼,進(jìn)行修改,修改所有與這個(gè)對象有關(guān)的操作。這對我們是非常不利的。問題出來了:對象不能應(yīng)對“具體實(shí)例化類型”的變化解決思路:封裝變化點(diǎn),哪里
2、變化,封裝哪里。在這個(gè)例子中,要實(shí)例化的類變了,就將實(shí)例化這個(gè)操作封裝起來,我們可以把"new"這個(gè)操作移交一個(gè)具體的類,由它去負(fù)責(zé)根據(jù)我們的條件創(chuàng)建具體類的實(shí)例,也就是下面要說的“簡單工廠模式”。定義和意圖專門定義一個(gè)類來負(fù)責(zé)創(chuàng)建其他類的實(shí)例,被創(chuàng)建的實(shí)例通常都具有共同的父類或接口。簡單工廠模式又稱為靜態(tài)工廠方法(StaticFactoryMethod)模式,屬于類的創(chuàng)建型模式,通常根據(jù)一個(gè)條件(參數(shù))來返回不同的類的實(shí)例。意圖:提供一個(gè)類,由它負(fù)責(zé)根據(jù)一定的條件創(chuàng)造某一具體類的實(shí)例.參于者工廠角色(Creator)是簡單工廠模式的核心,它負(fù)責(zé)實(shí)現(xiàn)創(chuàng)建所有具體產(chǎn)品類的實(shí)例。工
3、廠類可以被外界直接調(diào)用,創(chuàng)建所需的產(chǎn)品對象。抽象產(chǎn)品角色(Product)是所有具體產(chǎn)品角色的父類,它負(fù)責(zé)描述所有實(shí)例所共有的公共接口。具體產(chǎn)品角色(ConcreteProduct)繼承自抽象產(chǎn)品角色,一般為多個(gè),是簡單工廠模式的創(chuàng)建目標(biāo)。工廠類返回的都是該角色的某一具體產(chǎn)品。UML圖現(xiàn)實(shí)生活中例子每次參加不同的聚會或者與不同的人見面,可能穿的衣服是不一樣的,比如,你今天上午要與你的一個(gè)新客戶見面,你可能會對你的老婆說:老婆,給拿件商務(wù)裝(參數(shù)),我要去見我的一個(gè)客戶,你老婆(工廠類)接到你的請求(商務(wù)裝參數(shù))后,從衣柜中取出一件商務(wù)裝(具體產(chǎn)品),交給你。整個(gè)過程就完成了。分
4、析你可能根據(jù)不同的條件,要的衣服是不一樣的,但要的衣服都是已經(jīng)在你的衣柜中存在的。并且,每件上衣它們都屬于同一種抽象,即它們可以從一個(gè)抽象類或接口中繼承,這此衣服各自都有一定特征,這些都是條件。然后你要的時(shí)候,就可以向你老婆說一種特征,她就會根據(jù)這個(gè)特征為你服務(wù)了。這就是典型的簡單工廠模式的應(yīng)用。抽像產(chǎn)品代碼///////抽象產(chǎn)品類:上衣///publicinterfaceICoat{voidGetYourCoat();}具體產(chǎn)品類代碼/**///////具體產(chǎn)品類:商務(wù)上衣///publicclass
5、BusinessCoat:ICoat{publicvoidGetYourCoat(){Console.WriteLine("商務(wù)上衣");}}/**///////具體產(chǎn)品類:時(shí)尚上衣///publicclassFashionCoat:ICoat{/**///////實(shí)現(xiàn)ICoat中定義的方法//////publicvoidGetYourCoat(){Console.WriteLine("時(shí)尚上衣");}}}工廠類//////簡單工廠模式中的核心部分
6、:工廠類///publicclassFactory{publicICoatCreateCoat(stringstyleName){switch(styleName.Trim().ToLower()){case"business":returnnewBusinessCoat();case"fashion":returnnewFashionCoat();default:thrownewException("還沒有你要的那種衣服");}}}客戶調(diào)用代碼staticvoidMain(string[]args){ICoatfood;try{Factoryfactory
7、=newFactory();Console.Write("我要的是時(shí)尚上衣t");food=factory.CreateCoat("fashion");food.GetYourCoat();}catch(Exceptionex){Console.WriteLine(ex.Message);}}優(yōu)點(diǎn)簡單工廠模式能夠根據(jù)外界給定的信息,決定究竟應(yīng)該創(chuàng)建哪個(gè)具體類的對象。通過它,外界可以從直接創(chuàng)建具體產(chǎn)品對象的尷尬局面中擺脫出來。外界與具體類隔離開來,偶合性低。明確區(qū)分了各自的職責(zé)和權(quán)力,有利于