資源描述:
《java_程序設計模式之工廠模式《程序設計模式》結課論文.doc》由會員上傳分享,免費在線閱讀,更多相關內容在應用文檔-天天文庫。
1、河南理工大學《程序設計模式》結課論文運用.net設計2013—2015學年第1學期論文題目java程序設計模式——工廠方法模式<摘>:工廠方法模式(別名:虛擬構造)定義一個用于創(chuàng)建對象的接口,讓子類決定實例化哪一個類。FactoryMethod使一個類的實例化延遲到其子類。MediatorPattern(AnothreName:VirtualConstructor)Defineaninterfaceforcreatinganobject,butletsubclassesDecidewhichclasstoin
2、stantiate.FactoryMeyhodletsaclassdeferinstantiationtosubclasses.------上述是摘自《DesignPatterns》中GOF對工廠方法模式的高度概括下面就Java程序設計模式中工廠模式做一些介紹以及設計一個簡單的程序設計,再總結一些個人體會。一工廠方法模式的介紹在工廠方法模式中,核心的工廠類不再負責所有的產品的創(chuàng)建,而是將具體創(chuàng)建的工作交給子類去做。這個核心類則搖身一變,成為了一個抽象工廠角色,僅負責給出具體工廠子類必須實現(xiàn)的接口,而不接觸哪一
3、個產品類應當被實例化這種細節(jié)。1.1工廠方法模式角色(1)抽象工廠(Creator)角色:擔任這個角色的是工廠方法模式的核心,它是與應用程序無關的。任何在模式中創(chuàng)建對象的工廠類必須實現(xiàn)這個接口。在上面的系統(tǒng)中這個角色由Java接口Creator扮演;在實際的系統(tǒng)中,這個角色也常常使用抽象Java類實現(xiàn)。(2)具體工廠(ConcreteCreator)角色:擔任這個角色的是實現(xiàn)了抽象工廠接口的具體Java類。具體工廠角色含有與應用密切相關的邏輯,并且受到應用程序的調用以創(chuàng)建產品對象。在本系統(tǒng)中給出了兩個這樣的角
4、色,也就是具體Java類ConcreteCreator1和ConcreteCreator2。(3)抽象產品(Product)角色:工廠方法模式所創(chuàng)建的對象的超類型,也就是產品對象的共同父類或共同擁有的接口。在本系統(tǒng)中,這個角色由Java接口Product扮演;在實際的系統(tǒng)中,這個角色也常常使用抽象Java類實現(xiàn)。(4)具體產品(ConcreteProduct)角色:這個角色實現(xiàn)了抽象產品角色所聲明的接口。工廠方法模式所創(chuàng)建的每一個對象都是某個具體產品角色的實例。?1.2工廠方法模式的適用環(huán)境在以下情況下可以使
5、用工廠方法模式:(1)一個類不知道它所需要的對象的類:在工廠方法模式中,客戶端不需要知道具體產品類的類名,只需要知道所對應的工廠即可,具體的產品對象由具體工廠類創(chuàng)建;客戶端需要知道創(chuàng)建具體產品的工廠類。(2)一個類通過其子類來指定創(chuàng)建哪個對象:在工廠方法模式中,對于抽象工廠類只需要提供一個創(chuàng)建產品的接口,而由其子類來確定具體要創(chuàng)建的對象,利用面向對象的多態(tài)性和里氏代換原則,在程序運行時,子類對象將覆蓋父類對象,從而使得系統(tǒng)更容易擴展。(3)將創(chuàng)建對象的任務委托給多個工廠子類中的某一個,客戶端在使用時可以無需關
6、心是哪一個工廠子類創(chuàng)建產品子類,需要時再動態(tài)指定,可將具體工廠類的類名存儲在配置文件或數據庫中。二做一個簡單的程序設計下面是一個簡單的水果生產程序,描述農場種植水果的過程程序設計步驟如下:在這個系統(tǒng)里需要描述下列的水果:葡萄Grape草莓Strawberry蘋果Apple水果與其他的植物有很大的不同,就是水果最終是可以采摘食用的。那么一個自然的作法就是建立一個各種水果都適用的接口,以便與農場里的其他植物區(qū)分開。水果接口規(guī)定出所有的水果必須實現(xiàn)的接口,包括任何水果類必須具備的方法:種植plant(),生長gro
7、w()以及收獲harvest()。這個水果接口的源代碼如下所示。代碼清單1:接口Fruit的源代碼publicinterfaceFruit{//生長voidgrow();?//收獲voidharvest();?//種植voidplant();}?Apple類是水果類的一種,因此它實現(xiàn)了水果接口所聲明的所有方法。另外,由于蘋果是多年生植物,因此多出一個treeAge性質,描述蘋果樹的樹齡。下面是這個蘋果類的源代碼。?代碼清單2:類Apple的源代碼publicclassApple???implementsFru
8、it{privateinttreeAge;//生長publicvoidgrow(){???log("Appleisgrowing...");}?//收獲publicvoidharvest(){???log("Applehasbeenharvested.");}?//種植publicvoidplant(){???log("Applehasbeenplanted.");}?//輔助方法publicsta