資源描述:
《簡(jiǎn)單工廠模式.ppt》由會(huì)員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在教育資源-天天文庫(kù)。
1、Java創(chuàng)建對(duì)象的方法所有面向?qū)ο蟮恼Z(yǔ)言都有固定的創(chuàng)立對(duì)象的辦法。java的辦法就是使用new操作符。比如StringBuffers=newStringBuffer(1000);使用new操作符的短處是事先必須明確知道要實(shí)例化的類是什么實(shí)例化的責(zé)任往往與使用實(shí)例的責(zé)任不加區(qū)分。創(chuàng)立性模式面向?qū)ο蟮脑O(shè)計(jì)的目的之一,就是把責(zé)任進(jìn)行劃分,以分派給不同的對(duì)象。創(chuàng)立性模式把對(duì)象的創(chuàng)立過(guò)程封裝起來(lái),使得創(chuàng)立實(shí)例的責(zé)任與使用實(shí)例的責(zé)任分割開由專門的模塊分管實(shí)例的創(chuàng)立,而系統(tǒng)在宏觀上不再依賴于對(duì)象創(chuàng)立過(guò)程的細(xì)節(jié)創(chuàng)立性模式創(chuàng)立性模式將類實(shí)例化,不必事先知道每次是要實(shí)例化哪一個(gè)類把實(shí)例化的責(zé)任
2、與使用實(shí)例的責(zé)任分割開來(lái)工廠模式工廠模式就是專門負(fù)責(zé)將大量有共同接口的類實(shí)例化,而且不必事先知道每次是要實(shí)例化哪一個(gè)類的模式。工廠模式有以下幾種形態(tài):簡(jiǎn)單工廠(SimpleFactory)模式工廠方法(FactoryMethod)模式抽象工廠(AbstractFactory)模式簡(jiǎn)單工廠(SimpleFactory)模式比如說(shuō),你有一個(gè)描述你的后花園的系統(tǒng),在你的后花園里有各種的花,但還沒有水果。你現(xiàn)在要往你的系統(tǒng)里引進(jìn)一些新的類,用來(lái)描述下列的水果: 葡萄Grapes草莓Strawberry萍果Apple簡(jiǎn)單工廠(SimpleFactory)模式源代碼源代碼源代
3、碼源代碼簡(jiǎn)單工廠(SimpleFactory)模式作為小花果園的主人兼園丁,也是系統(tǒng)的一部分,自然要由一個(gè)合適的類來(lái)代表,這個(gè)類就是FruitGardener類。源代碼園丁的工作(簡(jiǎn)單工廠)FruitGardener類會(huì)根據(jù)要求,創(chuàng)立出不同的水果類,比如萍果Apple,葡萄Grape或草莓Strawberry的實(shí)例。這里的園丁就如同一個(gè)可以創(chuàng)建水果產(chǎn)品的工廠一樣如果接到不合法的要求,FruitGardener類會(huì)給出例外BadFruitException。源代碼豐收的果園(客戶端)在使用時(shí),只須呼叫FruitGardener的factory()方法即可try{ Fruit
4、Gardenergardener=newFruitGardener();FruitIFgrape=gardener.factory("grape");FruitIFapple=gardener.factory("apple");FruitIFstrawberry=gardener.factory("strawberry"); ... } catch(BadFruitExceptione){ ...}小結(jié):簡(jiǎn)單工廠模式的定義總而言之,簡(jiǎn)單工廠模式就是由一個(gè)工廠類根據(jù)參數(shù)來(lái)決定創(chuàng)立出那一種產(chǎn)品類的實(shí)例。小結(jié):簡(jiǎn)單工廠模式框架的源代碼publicclassCreato
5、r{publicProductfactory(){ returnnewConcreteProduct();}}publicinterfaceProduct{}publicclassConcreteProductimplementsProduct{publicConcreteProduct(){}}源代碼:FruitIF接口接口FruitIF的源代碼。這個(gè)接口確定了水果類必備的方法:種植plant(),生長(zhǎng)grow(),以及收獲harvest()。packagecom.javapatterns.simplefactory;publicinterfaceFruitI
6、F{ voidgrow(); voidharvest(); voidplant(); Stringcolor=null; Stringname=null;}返回源代碼:Apple類萍果是多年生木本植物,因此具備樹齡treeAge性質(zhì)packagecom.javapatterns.simplefactory;publicclassAppleimplementsFruitIF{ publicvoidgrow(){ log("Appleisgrowing..."); } publicvoidharvest(){ log("Applehasbee
7、nharvested."); } publicvoidplant(){ log("Applehasbeenplanted."); } publicstaticvoidlog(Stringmsg){ System.out.println(msg); } publicintgetTreeAge(){returntreeAge;} publicvoidsetTreeAge(inttreeAge){this.treeAge=treeAge;} privateinttreeAge;}返回源代碼:Gr