工廠模式JAVAppt課件_第1頁
工廠模式JAVAppt課件_第2頁
工廠模式JAVAppt課件_第3頁
工廠模式JAVAppt課件_第4頁
工廠模式JAVAppt課件_第5頁
已閱讀5頁,還剩53頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領

文檔簡介

1、JAVA工廠方式工廠方式專門擔任將大量有共同接口的類實例化。工廠方式可以動態(tài)決議將哪一個類實例化,不用事先知道每次要實例化哪一個類。工廠方式的幾種形狀1簡單工廠Simple Factory方式,又稱靜態(tài)工廠方法方式Static Factory MethodPattern。2工廠方法Factory Method方式,又稱多態(tài)性工廠Polymorphic Factory方式或虛擬構造子Virtual Constructor方式;3籠統(tǒng)工廠Abstract Factory方式,又稱工具箱Kit 或Toolkit方式。簡單工廠實例比如說有一個農(nóng)場公司,專門向市場銷售各類水果。在這個系統(tǒng)里需求描畫以下的

2、水果:葡萄 Grape草莓 Strawberry蘋果 Apple水果與其他的植物有很大的不同,就是水果最終是可以采摘食用的。那么一個自然的作法就是建立一個各種水果都適用的接口,以便與農(nóng)場里的其他植物區(qū)分開。代碼清單1:接口Fruit 的源代碼public interface Fruit/* 生長*/void grow();/* 收獲*/void harvest();/* 種植*/void plant();代碼清單2:類Apple 的源代碼public class Apple implements Fruitprivate int treeAge;public void grow()log(Ap

3、ple is growing.);public void harvest()log(Apple has been harvested.);public void plant()log(Apple has been planted.);public static void log(String msg)System.out.println(msg);public int getTreeAge()return treeAge;public void setTreeAge(int treeAge)this.treeAge = treeAge;代碼清單3:類Grape 的源代碼public class

4、 Grape implements Fruitprivate boolean seedless;public void grow()log(Grape is growing.);public void harvest()log(Grape has been harvested.);public void plant()log(Grape has been planted.);public static void log(String msg)System.out.println(msg);public boolean getSeedless()return seedless;public vo

5、id setSeedless(boolean seedless)this.seedless = seedless;類Strawberry 的源代碼public class Strawberry implements Fruit public void grow() System.out.println(Strawberry is growing.); public void harvest() System.out.println(Strawberry has been harvested.); public void plant() System.out.println(Strawberry

6、 has been planted.); FruitGardener 類的源代碼public class FruitGardener public static Fruit factory(String which) throws BadFruitException if (which.equalsIgnoreCase(apple) return new Apple(); else if (which.equalsIgnoreCase(strawberry) return new Strawberry(); else if (which.equalsIgnoreCase(grape) retu

7、rn new Grape(); else throw new BadFruitException(Bad fruit request); 簡單工廠方式的構造工廠類Creator角色:擔任這個角色的是工廠方法方式的中心,含有與運用嚴密相關的商業(yè)邏輯。工廠類在客戶端的直接調用下創(chuàng)建產(chǎn)品對象,它往往由一個詳細Java 類實現(xiàn)?;\統(tǒng)產(chǎn)品Product角色:擔任這個角色的類是工廠方法方式所創(chuàng)建的對象的父類,或它們共同擁有的接口?;\統(tǒng)產(chǎn)品角色可以用一個Java 接口或者Java 籠統(tǒng)類實現(xiàn)。詳細產(chǎn)品Concrete Product角色:工廠方法方式所創(chuàng)建的任何對象都是這個角色的實例,詳細產(chǎn)品角色由一個詳細

8、Java 類實現(xiàn)。Creator 類的源代碼public class Creator public static Product factory() return new ConcreteProduct(); 籠統(tǒng)角色Product 接口的源代碼public interface Product詳細產(chǎn)品角色ConcreteProduct 類的源代碼public class ConcreteProduct implements Productpublic ConcreteProduct()多層次的產(chǎn)品構造簡單方式的優(yōu)缺陷優(yōu)點:方式的中心是工廠類。這個類含有必要的判別邏輯,可以決議在什么時候創(chuàng)建哪一

9、個產(chǎn)品類的實例。而客戶端那么可以免除直接創(chuàng)建產(chǎn)品對象的責任,而僅僅擔任“消費產(chǎn)品。簡單工廠方式經(jīng)過這種做法實現(xiàn)了對責任的分割。缺陷一: 當產(chǎn)品類有復雜的多層次等級構造時,工廠類只需它本人。以不變應萬變,就是方式的缺陷。 這個工廠類集中了一切的產(chǎn)品創(chuàng)建邏輯,構成一個無所不知的全能類,有人把這種類叫做上帝類God Class。假設這個全能類代表的是農(nóng)場的一個詳細園丁的話,那么這個園丁就需求對一切的產(chǎn)品擔任,成了農(nóng)場的關鍵人物,他什么時候不能正常任務了,整個農(nóng)場都要遭到影響。缺陷二: 當產(chǎn)品類有不同的接口種類時,工廠類需求判別在什么時候創(chuàng)建某種產(chǎn)品。這種對時機的判別和對哪一種詳細產(chǎn)品的判別邏輯混合在

10、一同,使得系統(tǒng)在未來進展功能擴展時較為困難。缺陷三: 由于簡單工廠方式運用靜態(tài)方法作為工廠方法,而靜態(tài)方法無法由子類承繼,因此,工廠角色無法構成基于承繼的等級構造?!伴_閉原那么“開閉原那么要求一個系統(tǒng)的設計可以允許系統(tǒng)在無需修正的情況下,擴展其功能。簡單工廠角色只在有限的程度上支持“開閉原那么。工廠方法方式工廠方法方式的意圖是定義一個創(chuàng)建產(chǎn)品對象的工廠接口,將實踐創(chuàng)建任務推遲到子類中。首先,在工廠方法方式中,中心的工廠類不再擔任一切的產(chǎn)品的創(chuàng)建,而是將詳細創(chuàng)建的任務交給子類去做。這個中心類那么搖身一變,成為了一個籠統(tǒng)工廠角色,僅擔任給出詳細工廠子類必需實現(xiàn)的接口,而不接觸哪一個產(chǎn)品類該當被實例

11、化這種細節(jié)。工廠方法方式的構造工廠方法方式的系統(tǒng)涉及到的角色籠統(tǒng)工廠Creator角色:擔任這個角色的是工廠方法方式的中心,它是與運用程序無關的。任何在方式中創(chuàng)建對象的工廠類必需實現(xiàn)這個接口。在上面的系統(tǒng)中這個角色由Java 接口Creator 扮演;在實踐的系統(tǒng)中,這個角色也經(jīng)常運用籠統(tǒng)Java 類實現(xiàn)。詳細工廠Concrete Creator角色:擔任這個角色的是實現(xiàn)了籠統(tǒng)工廠接口的詳細Java 類。詳細工廠角色含有與運用親密相關的邏輯,并且遭到運用程序的調用以創(chuàng)建產(chǎn)品對象。在本系統(tǒng)中給出了兩個這樣的角色,也就是詳細Java 類ConcreteCreator1 和ConcreteCreat

12、or2。工廠方法方式的系統(tǒng)涉及到的角色籠統(tǒng)產(chǎn)品Product角色:工廠方法方式所創(chuàng)建的對象的超類型,也就是產(chǎn)品對象的共同父類或共同擁有的接口。在本系統(tǒng)中,這個角色由Java 接口Product 扮演;在實踐的系統(tǒng)中,這個角色也經(jīng)常運用籠統(tǒng)Java 類實現(xiàn)。詳細產(chǎn)品Concrete Product角色:這個角色實現(xiàn)了籠統(tǒng)產(chǎn)品角色所聲明的接口。工廠方法方式所創(chuàng)建的每一個對象都是某個詳細產(chǎn)品角色的實例。實例農(nóng)場工廠方法方式和簡單工廠方式工廠方法方式的中心是一個籠統(tǒng)工廠類,而簡單工廠方式把中心放在一個詳細類上。工廠方法方式可以允許很多詳細工廠類從籠統(tǒng)工廠類中將創(chuàng)建行為承繼下來,從而可以成為多個簡單工廠

13、方式的綜合,進而推行了簡單工廠方式。工廠方法方式和簡單工廠方式與簡單工廠方式中的情形一樣的是,ConcreteCreator 的factory() 方法返還的數(shù)據(jù)類型是一個籠統(tǒng)類型Product,而不是哪一個詳細產(chǎn)品類型,而客戶端也不用知道所得到的產(chǎn)品的真實類型。這種多態(tài)性設計將工廠類選擇創(chuàng)建哪一個產(chǎn)品對象、如何創(chuàng)建這個對象的細節(jié)完全封裝在詳細工廠類內(nèi)部。對于添加新的產(chǎn)品類而言,這個系統(tǒng)完全支持“開-閉原那么。籠統(tǒng)工廠方式籠統(tǒng)工廠方式與工廠方法方式的區(qū)別籠統(tǒng)工廠方式與工廠方法方式的最大區(qū)別就在于,工廠方法方式針對的是一個產(chǎn)品等級構造;而籠統(tǒng)工廠方式那么需求面對多個產(chǎn)品等級構造?;\統(tǒng)工廠方式的構

14、造籠統(tǒng)工廠方式GOF95是對象的創(chuàng)建方式,它是工廠方法方式的進一步推行。假設一個子系統(tǒng)需求一些產(chǎn)品對象,而這些產(chǎn)品又屬于一個以上的產(chǎn)品等級構造。那么為了將消費這些產(chǎn)品對象的責任和創(chuàng)建這些產(chǎn)品對象的責任分割開來,可以引進籠統(tǒng)工廠方式。這樣的話,消費產(chǎn)品的一方不需求直接參與產(chǎn)品的創(chuàng)建任務,而只需求向一個公用的工廠接口懇求所需求的產(chǎn)品。下面就以一個表示性的系統(tǒng)為例,闡明這個方式的構造。產(chǎn)品構造A和B系統(tǒng)類圖籠統(tǒng)工廠方式涉及到的角色籠統(tǒng)工廠AbstractFactory角色:擔任這個角色的是工廠方法方式的中心,它是與運用系統(tǒng)的商業(yè)邏輯無關的。通常運用Java 接口或者籠統(tǒng)Java 類實現(xiàn),而一切的詳細

15、工廠類必需實現(xiàn)這個Java 接口或承繼這個籠統(tǒng)Java 類。詳細工廠類Conrete Factory角色:這個角色直接在客戶端的調用下創(chuàng)建產(chǎn)品的實例。這個角色含有選擇適宜的產(chǎn)品對象的邏輯,而這個邏輯是與運用系統(tǒng)的商業(yè)邏輯嚴密相關的。通常運用詳細Java 類實現(xiàn)這個角色?;\統(tǒng)工廠方式涉及到的角色籠統(tǒng)產(chǎn)品Abstract Product角色:擔任這個角色的類是工廠方法方式所創(chuàng)建的對象的父類,或它們共同擁有的接口。通常運用Java 接口或者籠統(tǒng)Java 類實現(xiàn)這一角色。詳細產(chǎn)品Concrete Product角色:籠統(tǒng)工廠方式所創(chuàng)建的任何產(chǎn)品對象都是某一個詳細產(chǎn)品類的實例。這是客戶端最終需求的東西,其內(nèi)部一定充溢了運用系統(tǒng)的商業(yè)邏輯。通常運用詳細Java 類實現(xiàn)這個角色。普通而言,有多少個產(chǎn)品等級構造,就會在工廠角色中發(fā)現(xiàn)多少個工廠方法。每一個產(chǎn)品等級構造中有多少詳細產(chǎn)品,就有多少個產(chǎn)品族,也就會在工廠等級構造中發(fā)現(xiàn)多少個詳細工

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論