版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領
文檔簡介
1、設計模式工廠模式1教學內(nèi)容 創(chuàng)建型模式創(chuàng)建型模式概述創(chuàng)建型模式簡介工廠模式 簡單工廠模式工廠方法模式抽象工廠模式2創(chuàng)建型模式創(chuàng)建型模式概述創(chuàng)建型模式(Creational Pattern)對類的實例化過程進行了抽象,能夠?qū)④浖K中對象的創(chuàng)建和對象的使用分離。為了使軟件的結(jié)構(gòu)更加清晰,外界對于這些對象只需要知道它們共同的接口,而不清楚其具體的實現(xiàn)細節(jié),使整個系統(tǒng)的設計更加符合單一職責原則。3創(chuàng)建型模式創(chuàng)建型模式概述創(chuàng)建型模式在創(chuàng)建什么(What),由誰創(chuàng)建(Who),何時創(chuàng)建(When)等方面都為軟件設計者提供了盡可能大的靈活性。創(chuàng)建型模式隱藏了類的實例的創(chuàng)建細節(jié),通過隱藏對象如何被創(chuàng)建和組合
2、在一起達到使整個系統(tǒng)獨立的目的。 4創(chuàng)建型模式想吃蘋果!?創(chuàng)建型模式概述5創(chuàng)建型模式通常獲取蘋果的兩種方式自己種蘋果樹去超市買創(chuàng)建型模式概述6創(chuàng)建型模式簡單工廠模式(Simple Factory) 工廠方法模式(Factory Method) 抽象工廠模式(Abstract Factory) 原型模式(Prototype) 單例模式(Singleton) 建造者模式(Builder) 創(chuàng)建型模式簡介7工廠模式工廠模式 專門負責將大量有共同接口的類實例化,而且不必事先知道每次是要實例化哪一個類的模式工廠模式有以下幾種形態(tài):簡單工廠(Simple Factory)模式 工廠方法(Factory M
3、ethod)模式抽象工廠(Abstract Factory)模式 思想:對類的實例化進行封裝。8簡單工廠模式(Simple Factory)9簡單工廠模式生活中的例子只要說出水果的名字就能得到想要的水果。10生活中的例子麥當勞和肯德基都賣雞翅,盡管口味有所不同,但不管你去麥當勞或肯德基,只管向服務員說“來四個雞翅”就行了。麥當勞和肯德基就是生產(chǎn)雞翅的Factory 11簡單工廠模式簡單工廠模式就是由一個工廠類根據(jù)傳入的參數(shù)決定創(chuàng)建出哪一種產(chǎn)品類的實例。一個工廠類封裝了所有的類的實例化12在程序的設計中不涉及到具體子類,達到封裝效果,也就減少錯誤修改的機會打個比方,就是具體事情做得越多,越容易范
4、錯誤。相反,官做得越高,說出的話越抽象越籠統(tǒng),犯錯誤可能性就越少。簡單工廠模式13簡單工廠模式模式動機考慮一個簡單的軟件應用場景,一個軟件系統(tǒng)可以提供多個外觀不同的按鈕(如圓形按鈕、矩形按鈕、菱形按鈕等),這些按鈕都源自同一個基類,不過在繼承基類后不同的子類修改了部分屬性從而使得它們可以呈現(xiàn)不同的外觀,如果我們希望在使用這些按鈕時,不需要知道這些具體按鈕類的名字,只需要知道表示該按鈕類的一個參數(shù),并提供一個調(diào)用方便的方法,把該參數(shù)傳入方法即可返回一個相應的按鈕對象,此時,就可以使用簡單工廠模式。14簡單工廠模式模式定義簡單工廠模式(Simple Factory Pattern):又稱為靜態(tài)工廠
5、方法(Static Factory Method)模式,它屬于類創(chuàng)建型模式。在簡單工廠模式中,可以根據(jù)自變量的不同返回不同類的實例。簡單工廠模式專門定義一個類來負責創(chuàng)建其他類的實例,被創(chuàng)建的實例通常都具有共同的父類。 15簡單工廠模式模式結(jié)構(gòu)if(arg.equalsIgnoreCase(A) return new ConcreteProductA;else if(arg.equalsIgnoreCase(B) return new ConcreteProductB;else .ConcreteProductAProductFactory+factoryMethod (String arg).
6、: ProductConcreteProductB16簡單工廠模式模式結(jié)構(gòu)簡單工廠模式包含如下角色:Factory:工廠角色Product:抽象產(chǎn)品角色ConcreteProduct:具體產(chǎn)品角色17簡單工廠模式模式分析將對象的創(chuàng)建和對象本身業(yè)務處理分離可以降低系統(tǒng)的耦合度,使得兩者修改起來都相對容易。 在調(diào)用工廠類的工廠方法時,由于工廠方法是靜態(tài)方法,使用起來很方便,可通過類名直接調(diào)用,而且只需要傳入一個簡單的參數(shù)即可。簡單工廠模式最大的問題在于工廠類的職責相對過重,增加新的產(chǎn)品需要修改工廠類的判斷邏輯,這一點與開閉原則是相違背的。簡單工廠模式的要點在于:當你需要什么,只需要傳入一個正確的參
7、數(shù),就可以獲取你所需要的對象,而無需知道其創(chuàng)建細節(jié)。 18簡單工廠模式模式實例與解析實例一:簡單電視機工廠某電視機廠專為各知名電視機品牌代工生產(chǎn)各類電視機,當需要海爾牌電視機時只需要在調(diào)用該工廠的工廠方法時傳入?yún)?shù)“Haier”,需要海信電視機時只需要傳入?yún)?shù)“Hisense”,工廠可以根據(jù)傳入的不同參數(shù)返回不同品牌的電視機?,F(xiàn)使用簡單工廠模式來模擬該電視機工廠的生產(chǎn)過程。19簡單工廠模式模式實例與解析實例一:簡單電視機工廠20簡單工廠模式模式實例與解析實例二:權(quán)限管理在某OA系統(tǒng)中,系統(tǒng)根據(jù)對比用戶在登錄時輸入的賬號和密碼以及在數(shù)據(jù)庫中存儲的賬號和密碼是否一致來進行身份驗證,如果驗證通過,則
8、取出存儲在數(shù)據(jù)庫中的用戶權(quán)限等級(以整數(shù)形式存儲),根據(jù)不同的權(quán)限等級創(chuàng)建不同等級的用戶對象,不同等級的用戶對象擁有不同的操作權(quán)限?,F(xiàn)使用簡單工廠模式來設計該權(quán)限管理模塊。21簡單工廠模式模式實例與解析實例二:權(quán)限管理22簡單工廠模式模式優(yōu)缺點簡單工廠模式的優(yōu)點如下:工廠類含有必要的判斷邏輯,可以決定在什么時候創(chuàng)建哪一個產(chǎn)品類的實例,客戶端可以免除直接創(chuàng)建產(chǎn)品對象的責任,而僅僅“消費”產(chǎn)品;簡單工廠模式通過這種做法實現(xiàn)了對責任的分割,它提供了專門的工廠類用于創(chuàng)建對象??蛻舳藷o需知道所創(chuàng)建的具體產(chǎn)品類的類名,只需要知道具體產(chǎn)品類所對應的參數(shù)即可,對于一些復雜的類名,通過簡單工廠模式可以減少使用者
9、的記憶量。23簡單工廠模式模式優(yōu)缺點簡單工廠模式的缺點如下:由于工廠類集中了所有產(chǎn)品創(chuàng)建邏輯,一旦不能正常工作,整個系統(tǒng)都要受到影響。使用簡單工廠模式將會增加系統(tǒng)中類的個數(shù),在一定程序上增加了系統(tǒng)的復雜度和理解難度。系統(tǒng)擴展困難,一旦添加新產(chǎn)品就不得不修改工廠邏輯,在產(chǎn)品類型較多時,有可能造成工廠邏輯過于復雜,不利于系統(tǒng)的擴展和維護。簡單工廠模式由于使用了靜態(tài)工廠方法,造成工廠角色無法形成基于繼承的等級結(jié)構(gòu)。24簡單工廠模式模式適用環(huán)境在以下情況下可以使用簡單工廠模式:工廠類負責創(chuàng)建的對象比較少:由于創(chuàng)建的對象較少,不會造成工廠方法中的業(yè)務邏輯太過復雜;客戶端只知道傳入工廠類的參數(shù),對于如何創(chuàng)
10、建對象不關心:客戶端既不需要關心創(chuàng)建細節(jié),甚至連類名都不需要記住,只需要知道類型所對應的參數(shù)。25小結(jié)創(chuàng)建型模式對類的實例化過程進行了抽象,能夠?qū)ο蟮膭?chuàng)建與對象的使用過程分離。簡單工廠模式又稱為靜態(tài)工廠方法模式,它屬于類創(chuàng)建型模式。在簡單工廠模式中,可以根據(jù)參數(shù)的不同返回不同類的實例。簡單工廠模式專門定義一個類來負責創(chuàng)建其他類的實例,被創(chuàng)建的實例通常都具有共同的父類。簡單工廠模式包含三個角色:工廠角色負責實現(xiàn)創(chuàng)建所有實例的內(nèi)部邏輯;抽象產(chǎn)品角色是所創(chuàng)建的所有對象的父類,負責描述所有實例所共有的公共接口;具體產(chǎn)品角色是創(chuàng)建目標,所有創(chuàng)建的對象都充當這個角色的某個具體類的實例。26小結(jié)簡單工廠模
11、式的要點在于:當你需要什么,只需要傳入一個正確的參數(shù),就可以獲取你所需要的對象,而無須知道其創(chuàng)建細節(jié)。簡單工廠模式最大的優(yōu)點在于實現(xiàn)對象的創(chuàng)建和對象的使用分離,將對象的創(chuàng)建交給專門的工廠類負責,但是其最大的缺點在于工廠類不夠靈活,增加新的具體產(chǎn)品需要修改工廠類的判斷邏輯代碼,而且產(chǎn)品較多時,工廠方法代碼將會非常復雜。簡單工廠模式適用情況包括:工廠類負責創(chuàng)建的對象比較少;客戶端只知道傳入工廠類的參數(shù),對于如何創(chuàng)建對象不關心。27工廠方法模式(Factory Method)28工廠方法模式簡單工廠模式的不足在簡單工廠模式中,只提供了一個工廠類,該工廠類處于對產(chǎn)品類進行實例化的中心位置,它知道每一個
12、產(chǎn)品對象的創(chuàng)建細節(jié),并決定何時實例化哪一個產(chǎn)品類。簡單工廠模式最大的缺點是當有新產(chǎn)品要加入到系統(tǒng)中時,必須修改工廠類,加入必要的處理邏輯,這違背了“開閉原則”。在簡單工廠模式中,所有的產(chǎn)品都是由同一個工廠創(chuàng)建,工廠類職責較重,業(yè)務邏輯較為復雜,具體產(chǎn)品與工廠類之間的耦合度高,嚴重影響了系統(tǒng)的靈活性和擴展性,而工廠方法模式則可以很好地解決這一問題。29工廠方法模式模式動機考慮這樣一個系統(tǒng),按鈕工廠類可以返回一個具體的按鈕實例,如圓形按鈕、矩形按鈕、菱形按鈕等。在這個系統(tǒng)中,如果需要增加一種新類型的按鈕,如橢圓形按鈕,那么除了增加一個新的具體產(chǎn)品類之外,還需要修改工廠類的代碼,這就使得整個設計在一
13、定程度上違反了“開閉原則”。 30工廠方法模式模式動機現(xiàn)在對該系統(tǒng)進行修改,不再設計一個按鈕工廠類來統(tǒng)一負責所有產(chǎn)品的創(chuàng)建,而是將具體按鈕的創(chuàng)建過程交給專門的工廠子類去完成,我們先定義一個抽象的按鈕工廠類,再定義具體的工廠類來生成圓形按鈕、矩形按鈕、菱形按鈕等,它們實現(xiàn)在抽象按鈕工廠類中定義的方法。這種抽象化的結(jié)果使這種結(jié)構(gòu)可以在不修改具體工廠類的情況下引進新的產(chǎn)品,如果出現(xiàn)新的按鈕類型,只需要為這種新類型的按鈕創(chuàng)建一個具體的工廠類就可以獲得該新按鈕的實例,這一特點無疑使得工廠方法模式具有超越簡單工廠模式的優(yōu)越性,更加符合“開閉原則”。31工廠方法模式模式動機使用工廠方法模式設計的按鈕工廠32
14、工廠方法模式模式定義工廠方法模式(Factory Method Pattern)又稱為工廠模式,也叫虛擬構(gòu)造器(Virtual Constructor)模式或者多態(tài)工廠(Polymorphic Factory)模式,它屬于類創(chuàng)建型模式。在工廠方法模式中,工廠父類負責定義創(chuàng)建產(chǎn)品對象的公共接口,而工廠子類則負責生成具體的產(chǎn)品對象,這樣做的目的是將產(chǎn)品類的實例化操作延遲到工廠子類中完成,即通過工廠子類來確定究竟應該實例化哪一個具體產(chǎn)品類。33工廠方法模式模式實例與解析實例一:電視機工廠將原有的工廠進行分割,為每種品牌的電視機提供一個子工廠,海爾工廠專門負責生產(chǎn)海爾電視機,海信工廠專門負責生產(chǎn)海信電
15、視機,如果需要生產(chǎn)TCL電視機或創(chuàng)維電視機,只需要對應增加一個新的TCL工廠或創(chuàng)維工廠即可,原有的工廠無須做任何修改,使得整個系統(tǒng)具有更加的靈活性和可擴展性。 34工廠方法模式模式實例與解析實例一:電視機工廠35工廠方法模式模式實例與解析實例二:日志記錄器某系統(tǒng)日志記錄器要求支持多種日志記錄方式,如文件記錄、數(shù)據(jù)庫記錄等,且用戶可以根據(jù)要求動態(tài)選擇日志記錄方式,現(xiàn)使用工廠方法模式設計該系統(tǒng)。36工廠方法模式模式實例與解析實例二:日志記錄器37工廠方法模式模式優(yōu)缺點工廠方法模式的優(yōu)點在工廠方法模式中,工廠方法用來創(chuàng)建客戶所需要的產(chǎn)品,同時還向客戶隱藏了哪種具體產(chǎn)品類將被實例化這一細節(jié),用戶只需要
16、關心所需產(chǎn)品對應的工廠,無須關心創(chuàng)建細節(jié),甚至無須知道具體產(chǎn)品類的類名?;诠S角色和產(chǎn)品角色的多態(tài)性設計是工廠方法模式的關鍵。它能夠使工廠可以自主確定創(chuàng)建何種產(chǎn)品對象,而如何創(chuàng)建這個對象的細節(jié)則完全封裝在具體工廠內(nèi)部。工廠方法模式之所以又被稱為多態(tài)工廠模式,是因為所有的具體工廠類都具有同一抽象父類。使用工廠方法模式的另一個優(yōu)點是在系統(tǒng)中加入新產(chǎn)品時,無須修改抽象工廠和抽象產(chǎn)品提供的接口,無須修改客戶端,也無須修改其他的具體工廠和具體產(chǎn)品,而只要添加一個具體工廠和具體產(chǎn)品就可以了。這樣,系統(tǒng)的可擴展性也就變得非常好,完全符合“開閉原則”。38工廠方法模式模式優(yōu)缺點工廠方法模式的缺點在添加新產(chǎn)品
17、時,需要編寫新的具體產(chǎn)品類,而且還要提供與之對應的具體工廠類,系統(tǒng)中類的個數(shù)將成對增加,在一定程度上增加了系統(tǒng)的復雜度,有更多的類需要編譯和運行,會給系統(tǒng)帶來一些額外的開銷。由于考慮到系統(tǒng)的可擴展性,需要引入抽象層,在客戶端代碼中均使用抽象層進行定義,增加了系統(tǒng)的抽象性和理解難度,且在實現(xiàn)時可能需要用到DOM、反射等技術(shù),增加了系統(tǒng)的實現(xiàn)難度。39工廠方法模式模式適用環(huán)境在以下情況下可以使用工廠方法模式:一個類不知道它所需要的對象的類:在工廠方法模式中,客戶端不需要知道具體產(chǎn)品類的類名,只需要知道所對應的工廠即可,具體的產(chǎn)品對象由具體工廠類創(chuàng)建;客戶端需要知道創(chuàng)建具體產(chǎn)品的工廠類。一個類通過其
18、子類來指定創(chuàng)建哪個對象:在工廠方法模式中,對于抽象工廠類只需要提供一個創(chuàng)建產(chǎn)品的接口,而由其子類來確定具體要創(chuàng)建的對象,利用面向?qū)ο蟮亩鄳B(tài)性和里氏代換原則,在程序運行時,子類對象將覆蓋父類對象,從而使得系統(tǒng)更容易擴展。將創(chuàng)建對象的任務委托給多個工廠子類中的某一個,客戶端在使用時可以無須關心是哪一個工廠子類創(chuàng)建產(chǎn)品子類,需要時再動態(tài)指定。40工廠方法模式模式擴展使用多個工廠方法:在抽象工廠角色中可以定義多個工廠方法,從而使具體工廠角色實現(xiàn)這些不同的工廠方法,這些方法可以包含不同的業(yè)務邏輯,以滿足對不同的產(chǎn)品對象的需求。產(chǎn)品對象的重復使用:工廠對象將已經(jīng)創(chuàng)建過的產(chǎn)品保存到一個集合(如數(shù)組、List
19、等)中,然后根據(jù)客戶對產(chǎn)品的請求,對集合進行查詢。如果有滿足要求的產(chǎn)品對象,就直接將該產(chǎn)品返回客戶端;如果集合中沒有這樣的產(chǎn)品對象,那么就創(chuàng)建一個新的滿足要求的產(chǎn)品對象,然后將這個對象在增加到集合中,再返回給客戶端。 多態(tài)性的喪失和模式的退化:如果工廠僅僅返回一個具體產(chǎn)品對象,便違背了工廠方法的用意,發(fā)生退化,此時就不再是工廠方法模式了。一般來說,工廠對象應當有一個抽象的父類型,如果工廠等級結(jié)構(gòu)中只有一個具體工廠類的話,抽象工廠就可以省略,也將發(fā)生了退化。當只有一個具體工廠,在具體工廠中可以創(chuàng)建所有的產(chǎn)品對象,并且工廠方法設計為靜態(tài)方法時,工廠方法模式就退化成簡單工廠模式。 41小結(jié)工廠方法模
20、式又稱為工廠模式,它屬于類創(chuàng)建型模式。在工廠方法模式中,工廠父類負責定義創(chuàng)建產(chǎn)品對象的公共接口,而工廠子類則負責生成具體的產(chǎn)品對象,這樣做的目的是將產(chǎn)品類的實例化操作延遲到工廠子類中完成,即通過工廠子類來確定究竟應該實例化哪一個具體產(chǎn)品類。工廠方法模式包含四個角色:抽象產(chǎn)品是定義產(chǎn)品的接口,是工廠方法模式所創(chuàng)建對象的超類型,即產(chǎn)品對象的共同父類或接口;具體產(chǎn)品實現(xiàn)了抽象產(chǎn)品接口,某種類型的具體產(chǎn)品由專門的具體工廠創(chuàng)建,它們之間往往一一對應;抽象工廠中聲明了工廠方法,用于返回一個產(chǎn)品,它是工廠方法模式的核心,任何在模式中創(chuàng)建對象的工廠類都必須實現(xiàn)該接口;具體工廠是抽象工廠類的子類,實現(xiàn)了抽象工廠
21、中定義的工廠方法,并可由客戶調(diào)用,返回一個具體產(chǎn)品類的實例。 42小結(jié)工廠方法模式是簡單工廠模式的進一步抽象和推廣。由于使用了面向?qū)ο蟮亩鄳B(tài)性,工廠方法模式保持了簡單工廠模式的優(yōu)點,而且克服了它的缺點。在工廠方法模式中,核心的工廠類不再負責所有產(chǎn)品的創(chuàng)建,而是將具體創(chuàng)建工作交給子類去做。這個核心類僅僅負責給出具體工廠必須實現(xiàn)的接口,而不負責產(chǎn)品類被實例化這種細節(jié),這使得工廠方法模式可以允許系統(tǒng)在不修改工廠角色的情況下引進新產(chǎn)品。 工廠方法模式的主要優(yōu)點是增加新的產(chǎn)品類時無須修改現(xiàn)有系統(tǒng),并封裝了產(chǎn)品對象的創(chuàng)建細節(jié),系統(tǒng)具有良好的靈活性和可擴展性;其缺點在于增加新產(chǎn)品的同時需要增加新的工廠,導致
22、系統(tǒng)類的個數(shù)成對增加,在一定程度上增加了系統(tǒng)的復雜性。 工廠方法模式適用情況包括:一個類不知道它所需要的對象的類;一個類通過其子類來指定創(chuàng)建哪個對象;將創(chuàng)建對象的任務委托給多個工廠子類中的某一個,客戶端在使用時可以無須關心是哪一個工廠子類創(chuàng)建產(chǎn)品子類,需要時再動態(tài)指定。43抽象工廠模式(Abstract Factory)44抽象工廠模式模式動機在工廠方法模式中具體工廠負責生產(chǎn)具體的產(chǎn)品,每一個具體工廠對應一種具體產(chǎn)品,工廠方法也具有唯一性,一般情況下,一個具體工廠中只有一個工廠方法或者一組重載的工廠方法。但是有時候我們需要一個工廠可以提供多個產(chǎn)品對象,而不是單一的產(chǎn)品對象。45抽象工廠模式模式
23、動機為了更清晰地理解工廠方法模式,需要先引入兩個概念:產(chǎn)品等級結(jié)構(gòu):產(chǎn)品等級結(jié)構(gòu)即產(chǎn)品的繼承結(jié)構(gòu),如一個抽象類是電視機,其子類有海爾電視機、海信電視機、TCL電視機,則抽象電視機與具體品牌的電視機之間構(gòu)成了一個產(chǎn)品等級結(jié)構(gòu),抽象電視機是父類,而具體品牌的電視機是其子類。產(chǎn)品族:在抽象工廠模式中,產(chǎn)品族是指由同一個工廠生產(chǎn)的,位于不同產(chǎn)品等級結(jié)構(gòu)中的一組產(chǎn)品,如海爾電器工廠生產(chǎn)的海爾電視機、海爾電冰箱,海爾電視機位于電視機產(chǎn)品等級結(jié)構(gòu)中,海爾電冰箱位于電冰箱產(chǎn)品等級結(jié)構(gòu)中。 46抽象工廠模式模式動機產(chǎn)品族與產(chǎn)品等級結(jié)構(gòu)示意圖 47抽象工廠模式模式動機當系統(tǒng)所提供的工廠所需生產(chǎn)的具體產(chǎn)品并不是一個
24、簡單的對象,而是多個位于不同產(chǎn)品等級結(jié)構(gòu)中屬于不同類型的具體產(chǎn)品時需要使用抽象工廠模式。抽象工廠模式是所有形式的工廠模式中最為抽象和最具一般性的一種形態(tài)。抽象工廠模式與工廠方法模式最大的區(qū)別在于,工廠方法模式針對的是一個產(chǎn)品等級結(jié)構(gòu),而抽象工廠模式則需要面對多個產(chǎn)品等級結(jié)構(gòu),一個工廠等級結(jié)構(gòu)可以負責多個不同產(chǎn)品等級結(jié)構(gòu)中的產(chǎn)品對象的創(chuàng)建 。當一個工廠等級結(jié)構(gòu)可以創(chuàng)建出分屬于不同產(chǎn)品等級結(jié)構(gòu)的一個產(chǎn)品族中的所有對象時,抽象工廠模式比工廠方法模式更為簡單、有效率。 48抽象工廠模式模式動機抽象工廠模式示意圖49抽象工廠模式模式定義 抽象工廠模式(Abstract Factory Pattern):
25、提供一個創(chuàng)建一系列相關或相互依賴對象的接口,而無須指定它們具體的類。抽象工廠模式又稱為Kit模式,屬于對象創(chuàng)建型模式。50抽象工廠模式模式結(jié)構(gòu)51抽象工廠模式模式結(jié)構(gòu)抽象工廠模式包含如下角色:AbstractFactory:抽象工廠ConcreteFactory:具體工廠AbstractProduct:抽象產(chǎn)品Product:具體產(chǎn)品52抽象工廠模式模式分析53抽象工廠模式模式分析54抽象工廠模式模式分析55抽象工廠模式模式實例與解析實例一:電器工廠一個電器工廠可以產(chǎn)生多種類型的電器,如海爾工廠可以生產(chǎn)海爾電視機、海爾空調(diào)等,TCL工廠可以生產(chǎn)TCL電視機、TCL空調(diào)等,相同品牌的電器構(gòu)成一個
26、產(chǎn)品族,而相同類型的電器構(gòu)成了一個產(chǎn)品等級結(jié)構(gòu),現(xiàn)使用抽象工廠模式模擬該場景。56抽象工廠模式模式實例與解析實例一:電器工廠57抽象工廠模式模式實例與解析實例二:數(shù)據(jù)庫操作工廠 某系統(tǒng)為了改進數(shù)據(jù)庫操作的性能,自定義數(shù)據(jù)庫連接對象Connection和語句對象Statement,可針對不同類型的數(shù)據(jù)庫提供不同的連接對象和語句對象,如提供Oracle或SQL Server專用連接類和語句類,而且用戶可以通過配置文件等方式根據(jù)實際需要動態(tài)更換系統(tǒng)數(shù)據(jù)庫。使用抽象工廠模式設計該系統(tǒng)。58抽象工廠模式模式實例與解析實例二:數(shù)據(jù)庫操作工廠 59抽象工廠模式模式優(yōu)缺點抽象工廠模式的優(yōu)點抽象工廠模式隔離了具
27、體類的生成,使得客戶并不需要知道什么被創(chuàng)建。由于這種隔離,更換一個具體工廠就變得相對容易。所有的具體工廠都實現(xiàn)了抽象工廠中定義的那些公共接口,因此只需改變具體工廠的實例,就可以在某種程度上改變整個軟件系統(tǒng)的行為。另外,應用抽象工廠模式可以實現(xiàn)高內(nèi)聚低耦合的設計目的,因此抽象工廠模式得到了廣泛的應用。當一個產(chǎn)品族中的多個對象被設計成一起工作時,它能夠保證客戶端始終只使用同一個產(chǎn)品族中的對象。這對一些需要根據(jù)當前環(huán)境來決定其行為的軟件系統(tǒng)來說,是一種非常實用的設計模式。增加新的具體工廠和產(chǎn)品族很方便,無須修改已有系統(tǒng),符合“開閉原則”。60抽象工廠模式模式優(yōu)缺點抽象工廠模式的缺點在添加新的產(chǎn)品對象
28、時,難以擴展抽象工廠來生產(chǎn)新種類的產(chǎn)品,這是因為在抽象工廠角色中規(guī)定了所有可能被創(chuàng)建的產(chǎn)品集合,要支持新種類的產(chǎn)品就意味著要對該接口進行擴展,而這將涉及到對抽象工廠角色及其所有子類的修改,顯然會帶來較大的不便。開閉原則的傾斜性(增加新的工廠和產(chǎn)品族容易,增加新的產(chǎn)品等級結(jié)構(gòu)麻煩)61抽象工廠模式模式適用環(huán)境在以下情況下可以使用抽象工廠模式:一個系統(tǒng)不應當依賴于產(chǎn)品類實例如何被創(chuàng)建、組合和表達的細節(jié),這對于所有類型的工廠模式都是重要的。 系統(tǒng)中有多于一個的產(chǎn)品族,而每次只使用其中某一產(chǎn)品族。屬于同一個產(chǎn)品族的產(chǎn)品將在一起使用,這一約束必須在系統(tǒng)的設計中體現(xiàn)出來。系統(tǒng)提供一個產(chǎn)品類的庫,所有的產(chǎn)品
29、以同樣的接口出現(xiàn),從而使客戶端不依賴于具體實現(xiàn)。62抽象工廠模式模式應用(1) Java SE AWT(抽象窗口工具包)在Java語言的AWT(抽象窗口工具包)中就使用了抽象工廠模式,它使用抽象工廠模式來實現(xiàn)在不同的操作系統(tǒng)中應用程序呈現(xiàn)與所在操作系統(tǒng)一致的外觀界面。 63抽象工廠模式模式應用(2) 在很多軟件系統(tǒng)中需要更換界面主題,要求界面中的按鈕、文本框、背景色等一起發(fā)生改變時,可以使用抽象工廠模式進行設計。 64抽象工廠模式模式擴展“開閉原則”的傾斜性“開閉原則”要求系統(tǒng)對擴展開放,對修改封閉,通過擴展達到增強其功能的目的。對于涉及到多個產(chǎn)品族與多個產(chǎn)品等級結(jié)構(gòu)的系統(tǒng),其功能增強包括兩方
30、面:(1) 增加產(chǎn)品族:對于增加新的產(chǎn)品族,工廠方法模式很好的支持了“開閉原則”,對于新增加的產(chǎn)品族,只需要對應增加一個新的具體工廠即可,對已有代碼無須做任何修改。(2) 增加新的產(chǎn)品等級結(jié)構(gòu):對于增加新的產(chǎn)品等級結(jié)構(gòu),需要修改所有的工廠角色,包括抽象工廠類,在所有的工廠類中都需要增加生產(chǎn)新產(chǎn)品的方法,不能很好地支持“開閉原則”。抽象工廠模式的這種性質(zhì)稱為“開閉原則”的傾斜性,抽象工廠模式以一種傾斜的方式支持增加新的產(chǎn)品,它為新產(chǎn)品族的增加提供方便,但不能為新的產(chǎn)品等級結(jié)構(gòu)的增加提供這樣的方便。65抽象工廠模式模式擴展工廠模式的退化 當抽象工廠模式中每一個具體工廠類只創(chuàng)建一個產(chǎn)品對象,也就是只存在一個產(chǎn)品等級結(jié)構(gòu)時,抽象工廠模式退化成工廠方法模式;當工廠方法模式中抽象工廠與具體工廠合并,提供一個統(tǒng)一的工廠來創(chuàng)建產(chǎn)品對象,并將創(chuàng)建對象的工廠方法設計為靜態(tài)方法時,工廠方法模式退化成簡單工廠模式。66小結(jié)抽象工廠模式提供一個創(chuàng)建一系列相關或相互依賴對象的接口,
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 項目管理團隊協(xié)作
- 租期將滿:場地管理與維護
- 汽車展廳木地板安裝合同
- 2025航空貨物運輸合同范本
- 個性化定制增值服務承諾書
- 2025公司辦公室沙發(fā)定制合同
- 生物科技公司藥師合同范本
- 社會科學計量變更方法
- 2024年醫(yī)療機構(gòu)與醫(yī)護人員勞動關系合同范本3篇
- 2025版智能電網(wǎng)設備研發(fā)與推廣合同范本3篇
- 2023-2024學年江西省小學語文六年級期末??伎荚囶}附參考答案和詳細解析
- 2023-2024學年廣西壯族自治區(qū)南寧市小學語文五年級期末高分試題附參考答案和詳細解析
- 山東省菏澤市高職單招2023年綜合素質(zhì)自考測試卷(含答案)
- 中國兒童注意缺陷多動障礙(ADHD)防治指南
- 強力皮帶運行危險點分析及預控措施
- 基于STM32的可遙控智能跟隨小車的設計與實現(xiàn)-設計應用
- DB44T 1315-2014物業(yè)服務 檔案管理規(guī)范
- 基本醫(yī)療保險異地就醫(yī)登記備案申請表
- 非線性光纖光學六偏振效應PPT
- 愛國人物的歷史故事整理
- 天然藥物化學智慧樹知到答案章節(jié)測試2023年中國藥科大學
評論
0/150
提交評論