深入淺出講解設(shè)計模式中的工廠模式
《深入淺出講解設(shè)計模式中的工廠模式》由會員分享,可在線閱讀,更多相關(guān)《深入淺出講解設(shè)計模式中的工廠模式(74頁珍藏版)》請在裝配圖網(wǎng)上搜索。
1、設(shè)計模式,廣東科學技術(shù)職業(yè)學計算機工程學院,工廠模式,設(shè)計模式之--工廠模式,工廠模式專門負責將大量有共同接口的類實例化。工廠模式可以動態(tài)決定將哪一個類實例化,不必事先知道要實例化哪一個類。工廠模式有以下幾種形態(tài): 簡單工廠模式:又稱靜態(tài)工廠方法模式。 工廠方法模式:又稱多態(tài)性工廠模式。 抽象工廠模式:又稱工具箱模式,設(shè)計模式之--簡單工廠模式,,追MM少不了請吃飯了,麥當勞的雞翅和肯德基的雞翅都是MM愛吃的東西,雖然口味有所不同,但不管你帶MM去麥當勞或肯德基,只管向服務(wù)員說“來四個雞翅”就行。麥當勞和肯德基就是生產(chǎn)雞翅的Factory。,設(shè)計模式之--簡單工廠模式,,話說乾隆皇帝酷愛古董文
2、物,大貪官和申當然不會放過這個溜須拍馬的好機會,但是苦于他自己不懂文物,也沒有時間親自去收集鑒別,所以干脆私下里成立了一個衙門叫做文物管理局,負責給他收集天下的古董文物。他什么時候想要只需一句話,“來一件XXX”,一件文物就到他手里了。 看出點名堂了吧,我們的和中堂要是在現(xiàn)代可是設(shè)計模式高手哦。這就是簡單工廠模式了。 文物管理局就是工廠,青銅器、字畫、瓷器都是具體產(chǎn)品,客戶端當然是和申了,他不需要親自創(chuàng)建這些產(chǎn)品,需要的時候給工廠招呼一聲就是了,雖然他不懂也沒有時間去研究這些產(chǎn)品(當官就是好啊,呵呵)。下面看看代碼吧:,設(shè)計模式之--簡單工廠模式,,,,,,,,,,,,,,,-antique:
3、IAntique,和申,+main:void,,,interface 古董,,,瓷器,Name:String,,,,,水墨畫,青銅器,Name:String,Name:String,,,工廠:文物管理衙門,+factory:IAntique,,,,,Exception BadIantiqueException,+BadIantiqueException,,,設(shè)計模式之--簡單工廠模式,,這里有個小問題,和申必須知道衙門里都有些什么文物,如果他要了一件沒有的東西就會出錯,這對日理萬機的和中堂來說可就是個大問題了。另外,如果出現(xiàn)了新種類的古董,文物管理局的內(nèi)部結(jié)構(gòu)就要重新調(diào)整一下,這樣可不利于管理
4、呀。不過不要緊,文物管理局由于工作做得好,已經(jīng)被乾隆皇帝升格了,簡單工廠模式也變成了工廠方法模式。具體怎么回事,且聽下回分解。,設(shè)計模式之--簡單工廠模式,簡單工廠模式:客戶類和工廠類分開。消費者任何時候需要某種產(chǎn)品,只需向工廠請求即可。消費者無須修改就可以接納新產(chǎn)品。,設(shè)計模式之--簡單工廠模式,有一個農(nóng)場公司,專門向市場銷售各類水果。在這個系統(tǒng)里需要描述下列的水果: 葡萄:Grape 草莓:Strawberry 蘋果:Apple 水果與其他的植物有很大的不同,水果最終是可以采摘食用的。那么一個自然的作法就是建立一個各種水果都適用的接口,以便與農(nóng)場里的其他植物區(qū)分開。,設(shè)計模式之--簡單工廠
5、模式,,,,,,,,,,,,,,,+grow:void +harvest:void +plant:void,+grow:void +harvest:void +plant:void,+grow:void +harvest:void +plant:voidape,Grape,Apple,Strawberry,Seedless:boolen,treeAge:int,,,,,client,,,設(shè)計模式之--簡單工廠模式,客 戶,,工廠,,具體產(chǎn)品,,抽象產(chǎn)品,設(shè)計模式之--簡單工廠模式,Creator +factory:Product,,,,,,,,ConcreteProduct,+Concrete
6、Product,,,,,Interface Product,設(shè)計模式之--簡單工廠模式,從上圖可以看出簡單工廠模式的三個角色: 工廠類 (Creator)角色:擔任這個角色的是工廠方法方法模式的核心,含有與應(yīng)用緊密相關(guān)的商業(yè)邏輯.工廠類在客戶端的直接調(diào)用下創(chuàng)建產(chǎn)品對象,它往往由一個具體JAVA類實現(xiàn)。 抽象產(chǎn)品(Product)角色:擔任這個角色的類是由工廠方法模式所創(chuàng)建的對象的父類,或它們共同擁有的接口。抽象產(chǎn)品角色可以用一個JAVA接口或JAVA抽象類實現(xiàn)。 具體產(chǎn)品(Concrete Product)角色:工廠方法模式所創(chuàng)建的任何對象都是這個角色的實例,具體產(chǎn)品由一個具體JAVA類實現(xiàn).
7、,設(shè)計模式之--簡單工廠模式,多層次的產(chǎn)品結(jié)構(gòu) 在真實的系統(tǒng)中,產(chǎn)品可以形成復(fù)雜的等級結(jié)構(gòu),,Product,Product,Product,Product,Product,Product,,,,,,,,,,設(shè)計模式之--簡單工廠模式,這個時候,簡單工廠模式采取的是以不變應(yīng)萬變的策略,一律使用同一個工廠,客戶,,工廠,,,,,,,,,,,設(shè)計模式之--簡單工廠模式,這樣做的好處是設(shè)計簡單,產(chǎn)品類的等級結(jié)構(gòu)不會反映到工廠類中,從而產(chǎn)品類的等級結(jié)構(gòu)的變化也不會影響到工廠類。但這樣做的缺點是,增加新的產(chǎn)品必將導致工廠類的修改。,設(shè)計模式之--簡單工廠模式,使用JAVA接口或者JAVA抽象類,如果模式
8、所生產(chǎn)的具體產(chǎn)品彼此之間 沒有共同的商業(yè)邏輯,那么抽象產(chǎn)品 角色可以由一個JAVA接口扮演。相反 如果這些具體的產(chǎn)品類彼此之間確實 有共同的商業(yè)邏輯,那么這些共有的 邏輯就應(yīng)當移到抽象角色里面,這就 意味著抽象角色應(yīng)當由一個抽象類扮 演。在一個類型的等級結(jié)構(gòu)中,共同 的代碼應(yīng)當盡量向上移動。以達到公 享的目的。,,,,,,,,,抽象類,抽象類,抽象類,具體類,具體類,具體類,,代碼集中的方向,設(shè)計模式之--簡單工廠模式,幾種變化 抽象產(chǎn)品角色的省略:如果系統(tǒng)僅有一個具體產(chǎn)品角色,那么就可以省略抽象產(chǎn)品角色。,工廠,,具體產(chǎn)品,,,,,,,,Creator,+factory:ConcreteP
9、roduct,ConcreteProduct,+ConcreteProduct,Creates,設(shè)計模式之--簡單工廠模式,幾種變化 工廠角色與抽象角色合并:在有些情況下,工廠角色可以由抽象產(chǎn)品角色扮演。典型的應(yīng)用就是java,text,DateFormat。,抽象產(chǎn)品,具體產(chǎn)品,,,,,創(chuàng)建,設(shè)計模式之--簡單工廠模式,幾種變化 三個角色全部合并:如果抽象產(chǎn)品角色已經(jīng)被省略,而工廠角色就可以與具體產(chǎn)品角色合并。,,,,ConcreteProduct,+ConcreteProduct,+factory:ConcreteProduct,設(shè)計模式之--簡單工廠模式,簡單工廠模式在Java中的應(yīng)用
10、,DataFormat與簡單工廠模式,設(shè)計模式之--簡單工廠模式,女媧摶土造人: 風俗通中說:“俗說天地開辟,未有人民。女媧摶黃土為人。”女媧需要用土造出一個個人,這是一個簡單的工廠模式的應(yīng)用。 女媧是一個工廠類,也就是簡單工廠模式的核心角色。 具體的一個個人,包括張三、李四等。這些人便是簡單工廠模式里面的具體產(chǎn)品角色。 抽象的人便是最早只存在于女媧的頭腦里的一個想法,女媧按照這個想法造出的一個一個具體的人便都符合這個抽象的人的定義。換言之,這個抽象的想法規(guī)定了所有具體的人類必須具有的接口。,設(shè)計模式之--簡單工廠模式,,,Interface 人,+吃飯() +睡覺() +說話(),,,,,,
11、,,,,設(shè)計模式之--簡單工廠模式,思考題 請使用簡單工廠模式設(shè)計一個創(chuàng)建不同幾何形狀,描圖員系統(tǒng),要求創(chuàng)建不支持的幾何圖形拋出BadShapeEception異常。請給出源代碼,描圖員系統(tǒng)怎么使用。,設(shè)計模式之工廠方法模式,請MM去麥當勞吃漢堡,不同的MM有不同的口味,要每個都記住是一件煩人的事情,我一般采用Factory Method模式,帶著MM到服務(wù)員那兒,說“要一個漢堡”,具體要什么樣的漢堡呢,讓MM直接跟服務(wù)員說就行了。,設(shè)計模式之工廠方法模式,且說和申的文物管理局辦得紅紅火火,得到了乾隆皇帝的好評(請看第一部分),但是仍然有一些美中不足的地方。 第一個問題就是:和申每次需要文物
12、,必須清楚地知道衙門里都有哪些文物,還要知道他們的名字,否則是得不到文物的。這點小事對于日理萬機的軍機大臣來說,實在是不值得的。 第二個問題就是:大清律法有一條規(guī)定,一個衙門一旦設(shè)定并正常運轉(zhuǎn),其人員編制、機構(gòu)設(shè)置、職責任務(wù)等等,都不能輕易變更,除非得到皇帝的特準;但是如果工作需要,大臣們可以設(shè)立新的衙門,不需要皇帝批準。 而和申的文物管理局每次要處理新種類的文物,就必須對機構(gòu)人員重新設(shè)定一番,這就要向乾隆報批,這可不是什么好事。,設(shè)計模式之工廠方法模式,題外話:大家可能都很不理解,大清為什么會有這么一條奇怪的律法,且聽我慢慢道來。有一天乾隆睡覺的時候做了一個夢,夢里有四個鬼叫做 Gof 什么
13、的,和他交流治國之道,四個鬼就說了,我們這有一條治國方略,照著去做國家就可以強盛,具體內(nèi)容就是上面的那個規(guī)定,用我們現(xiàn)代人的話來說,就是衙門要盡量免于修改,而易于擴展。這就是我國為什么公務(wù)員人數(shù)總是嚴重超標的原因呀。,設(shè)計模式之工廠方法模式,為了應(yīng)對這兩個問題,和申上報乾隆,進行了機構(gòu)改革,具體內(nèi)容就是在文物管理局下面設(shè)立青銅器司、瓷器司、水墨畫司等等等等,這樣每次要處理新種類的文物,直接成立一個與之相對應(yīng)的“XX司”就行了,而已經(jīng)成立的那些部門不會受到任何影響,第二個問題迎刃而解。至于第一個問題,有事直接找衙門,比記住復(fù)雜的古董名稱輕松多了。 另外,設(shè)立了司這一級后,文物管理局就成了機關(guān)(抽
14、象化了),不具體干活了。 這里:文物管理局就是抽象工廠,青銅器司、瓷器司、水墨畫司等等就是具體工廠,下面看看代碼是怎么實現(xiàn)的:,,設(shè)計模式之工廠方法模式,,,,,,,,,,,,,,,,,和申,+GetAntiques +main:void,interface 文物管理衙門,+Factory: IAntique,,,,,,,瓷器司,水墨司,青銅司,+Factory: IAntique,+Factory: IAntique,+Factory: IAntique,,,,,,Interface 古董,,,,,,,瓷器,水墨畫,青銅器,name:String,name:String,name:Strin
15、g,,,,,,,,,設(shè)計模式之工廠方法模式,工廠方法定義一個用于創(chuàng)建對象的接口,但是讓子類決定實例化哪個類。壓注成型演示了這種模式。塑料玩具制造商加工塑料粉,將塑料注入到希望形狀的模具中。玩具的類別(車,人物等等)是由模具決定的。,設(shè)計模式之工廠方法模式,工廠方法模式:核心工廠類不再負責所有產(chǎn)品的創(chuàng)建,而是將具體創(chuàng)建的工作交給子類去做,成為一個抽象工廠角色,僅負責給出具體工廠類必須實現(xiàn)的接口,而不接觸哪一個產(chǎn)品類應(yīng)當被實例化這種細節(jié)。,設(shè)計模式之工廠方法模式,現(xiàn)在繼續(xù)考察農(nóng)場的管理系統(tǒng)。在簡單工廠模式里,討論了支持水果類作物的系統(tǒng)。在那個系統(tǒng)中,有一個全知全能的園丁角色,控制所有作物的種植、生
16、長和收獲?,F(xiàn)在這個農(nóng)場的規(guī)模變大了,而同時發(fā)生的是管理更加專業(yè)化了,過去全能人物沒有了,每一種農(nóng)作物都有專門的園丁管理了,形成規(guī)?;蛯I(yè)化生產(chǎn)。,設(shè)計模式之工廠方法模式,產(chǎn)品角色的等級結(jié)構(gòu),所有的產(chǎn)品角色都屬于一個產(chǎn)品的等級結(jié)構(gòu),在這個等級結(jié)構(gòu)最上面是抽象產(chǎn)品 角色Pproduct。在本系統(tǒng)中,這個角色是由一個JAVA接口Fruit實現(xiàn)的。所有具 體產(chǎn)品都必須實現(xiàn)抽象產(chǎn)品Fruit所聲明的接口。,設(shè)計模式之工廠方法模式,,,,Interface fruitGardener,+factory:Fruit,StrawberryGardener,GrapeGardener,工廠角色的等級結(jié)構(gòu),在上
17、圖所示的等級結(jié)構(gòu)中,F(xiàn)ruitGardener是所有具體工廠角色的超類。 在本系統(tǒng)中,這個抽象角色有JAVA接口FruitGardener實現(xiàn)它聲明了一 個工廠方法,要求所有的具體工廠角色都實現(xiàn)這個工廠方法。,設(shè)計模式之工廠方法模式,,,,Interface fruitGardener,+factory:Fruit,,StrawberryGardener,GrapeGardener,,,,Creates,設(shè)計模式之工廠方法模式,平行的等級結(jié)構(gòu) 在一個系統(tǒng)設(shè)計中,常常是首先有產(chǎn)品角色,然后有工廠角色。在可以應(yīng)用工廠方法模式的情況下,一般都會有一個產(chǎn)品的等級結(jié)構(gòu),有一個(甚至多個)抽象產(chǎn)品和多個具
18、體產(chǎn)品組成。,設(shè)計模式之工廠方法模式,設(shè)計模式之工廠方法模式,在上面的產(chǎn)品等級結(jié)構(gòu)中,出現(xiàn)了多于一個的抽象產(chǎn)品類以及多于兩個的層次。這其實是真實系統(tǒng)中常常出現(xiàn)的情況。當將工廠方法模式應(yīng)用到這個系統(tǒng)中去的時候,常常采用的一個做法是按照產(chǎn)品等級結(jié)構(gòu)設(shè)計一個同結(jié)構(gòu)的工廠等級結(jié)構(gòu)。,設(shè)計模式之工廠方法模式,,設(shè)計模式之工廠方法模式,然后由響應(yīng)的工廠角色創(chuàng)建相應(yīng)的產(chǎn)品角色,如圖所示,虛線表示創(chuàng)建(依賴)關(guān)系。,工廠方法模式并沒有限制產(chǎn)品等級結(jié)構(gòu)的層數(shù),一般的書籍中都以兩個層次為例,第一層是抽象產(chǎn)品層,第二層是具體產(chǎn)品層。但是在實際系統(tǒng)中,產(chǎn)品常常有更為復(fù)雜的層次,設(shè)計模式之工廠方法模式,工廠方法模式的結(jié)
19、構(gòu),Client,-creator1:Creator -creator2:Creator -prod1:Product -prod2:Product,+main:void,,,,,,,,Interface Creator,+factory:Product,,,,,,,,Creates,+factory:Product,+ConcreteProduct2,,,設(shè)計模式之工廠方法模式,Java語言中的工廠方法模式的例子,URL與URLConnection的應(yīng)用,設(shè)計模式之工廠方法模式,女媧舉繩造人 風俗通中說:“俗說天地開辟,未有人民女媧摶黃土為人,劇務(wù),力不暇供,乃引繩與恒泥中,舉以為人?!?女
20、媧:使用一根繩子,在泥水里攪,然后一甩,所有的泥點都變成了人。當然,女媧造出來的人有男女之別,是因為女媧使用的繩子有陰陽之分。女媧使用了工廠方法模式。,設(shè)計模式之工廠方法模式,,,Interface 人,+吃飯() +睡覺() +說話(),,,,+吃飯() +睡覺() +說話(),張三男,,,,,,,,,,,,,,陽繩,陰繩,+舉繩造人,+舉繩造人,,,,,,設(shè)計模式之工廠方法模式,實現(xiàn)要點 1 Factory Method模式的兩種情況:一是Creator類是一個抽象類且它不提供它所聲明的工廠方法的實現(xiàn);二是Creator是一個具體的類且它提供一個工廠方法的缺省實現(xiàn)。 2 工廠方法是可以帶參
21、數(shù)的。 3 工廠的作用并不僅僅只是創(chuàng)建一個對象,它還可以做對象的初始化,參數(shù)的設(shè)置等。,設(shè)計模式之工廠方法模式,效果 1 用工廠方法在一個類的內(nèi)部創(chuàng)建對象通常比直接創(chuàng)建對象 更靈活。 2 Factory Method模式通過面向?qū)ο蟮氖址ǎ瑢⑺獎?chuàng)建的具體對象的創(chuàng)建工作延遲到了子類,從而提供了一種擴展的策略,較好的解決了這種緊耦合的關(guān)系。,設(shè)計模式之工廠方法模式,適用性 在以下情況下,適用于工廠方法模式: 1. 當一個類不知道它所必須創(chuàng)建的對象的類的時候。 2. 當一個類希望由它的子類來指定它所創(chuàng)建的對象的時候。 3. 當類將創(chuàng)建對象的職責委托給多個幫助子類中的某一個,并且你希望將哪一個幫助子
22、類是代理者這一信息局部化的時候。,設(shè)計模式之工廠方法模式,總結(jié) Factory Method模式是設(shè)計模式中應(yīng)用最為廣泛的模式,通過上述講解,相信我們已經(jīng)對它有了一定的認識。然而我們要明確的是:在面向?qū)ο蟮木幊讨?,對象的?chuàng)建工作非常簡單,對象的創(chuàng)建時機卻很重要。Factory Method要解決的就是對象的創(chuàng)建時機問題,它提供了一種擴展的策略,很好地符合了開放封閉原則。,設(shè)計模式之工廠方法模式,思考題 某一個商業(yè)軟件產(chǎn)品需要支持Sybase和Oracle。這個系統(tǒng)需要這樣的一個查詢運行器系統(tǒng),根據(jù)客戶端的需要,可以隨時向Sybase或者Oracle數(shù)據(jù)庫引擎發(fā)出查詢。請給出這樣的一個系統(tǒng)的示意
23、性設(shè)計,并且請考慮在設(shè)計中使用工廠方法模式是否適合。暫時可以假定所發(fā)出的查尋總是同一個SQL語句,設(shè)計模式之抽象工廠模式,抽象工廠的目的是要提供一個創(chuàng)建一系列相關(guān)或相互依賴對象的接口,而不需要指定它們具體的類。這種模式可以在日本汽車制造廠所使用的金屬沖壓設(shè)備中找到。這種沖壓設(shè)備可以制造汽車車身部件。同樣的機械用于沖壓不同的車型的右邊車門、左邊車門、右前擋泥板、左前擋泥板和引擎罩等等。通過使用轉(zhuǎn)輪來改變沖壓盤,這個機械產(chǎn)生的具體類可以在三分鐘內(nèi)改變。,設(shè)計模式之抽象工廠模式,設(shè)計模式之抽象工廠模式,抽象工廠模式的起源或者說最早的應(yīng)用,是用于創(chuàng)建屬于不同操作系統(tǒng)的視窗構(gòu)件。比如,Button和Te
24、xt都是視窗構(gòu)件,在UNIX和windows下,它們的本地實現(xiàn)是不同的,細節(jié)也不相同。,Button,Text,UnixButton,Windows,UnixText,WindowsText,,,,,,,,,,,設(shè)計模式之抽象工廠模式,,,產(chǎn)品等級結(jié)構(gòu),產(chǎn)品族,Button,Text,,,,,Unix,Windows,UnixButton,UnixText,WinButton,WinText,,,Unix產(chǎn)品族,,,Windows產(chǎn)品族,設(shè)計模式之抽象工廠模式,AbstractFactory,UnixFactory,WinFactory,,,,,Button,UnixButton,WinBut
25、ton,Text,UnixText,WinText,,,,,,,,,,,,,,,,,,設(shè)計模式之抽象工廠模式,在前面我們仔細討論了一個農(nóng)場從小到大的發(fā)展過程。而如今,農(nóng)場公司再次面臨新的大發(fā)展,一項重要的工作就是引進雕料大棚技術(shù),在大棚里種植熱帶(Tropical)和亞熱帶的水果和蔬菜。 可以看出,在這個系統(tǒng)中,產(chǎn)品分成了兩個等級結(jié)構(gòu):水果(Fruit)和蔬菜(Veggie)。兩個產(chǎn)品族Tropical和Northen。,,,設(shè)計模式之抽象工廠模式,,,產(chǎn)品等級結(jié)構(gòu),產(chǎn)品族,Fruit,Veggie,,,,,Tropical,Northen,TropcalFruit,TropicalVeggi
26、e,NorthemFruit,NorthemVeggie,,,Tropical產(chǎn)品族,,,Northen產(chǎn)品族,設(shè)計模式之抽象工廠模式,,,,interFace Fruit,,,設(shè)計模式之抽象工廠模式,,,,interFace Veggie,,,,,TropicalVeggie,+TropicalVeggie,Name:String,,,設(shè)計模式之抽象工廠模式,,Interface Gardener,TtopicalGardener,NorthenGardener,,,設(shè)計模式之抽象工廠模式,,Interface Gardener,,,,,,,,,,,,,,,,,,設(shè)計模式之抽象工廠模式,練習
27、: 設(shè)計一個微型計算機配件的生產(chǎn)。這個系統(tǒng)所需要的產(chǎn)品族有兩個,一個系列是IBM或兼容:另一個是MAC,產(chǎn)品等級結(jié)構(gòu)也有兩個,一個是RAM,另一個是CPU。,,,設(shè)計模式之抽象工廠模式,,,產(chǎn)品等級結(jié)構(gòu),產(chǎn)品族,RAM,CPU,,,,,IBM,MAC,PCRAM,PCCPU,MACRAM,MACCPU,,,Unix產(chǎn)品族,,,Windows產(chǎn)品族,設(shè)計模式之抽象工廠模式,,Interface ComputerProducer,,,,,,,,,,,,,,,,,,設(shè)計模式之抽象工廠模式,設(shè)計模式之抽象工廠模式,女媧造萬物 女媧不僅僅造了人,而且造了世間萬物這也包括動物。因此。女媧一定是把舉繩造人的
28、方法推廣到了創(chuàng)造各種動物身上??梢韵氲?,女媧把繩子攪到泥水里,然后把沾滿泥水的繩子憑空一甩,甩出的泥點,像人的變成人,其他變成了動物。并且分出男女、雌雄。,,,設(shè)計模式之抽象工廠模式,,,產(chǎn)品等級結(jié)構(gòu),產(chǎn)品族,人,獸,,,,,陰,陽,女人,雌獸,男人,雄獸,,,陰產(chǎn)品族,,,陽產(chǎn)品族,設(shè)計模式之--簡單工廠模式,,,,+吃飯() +睡覺() +說話(),亞當,,,,,,,,,,,,,,陽繩,陰繩,+舉繩造物,+舉繩造物,,,,,,,,設(shè)計模式之抽象工廠模式,實現(xiàn)要點 抽象工廠將產(chǎn)品對象的創(chuàng)建延遲到它的具體工廠的子類。 如果沒有應(yīng)對“多系列對象創(chuàng)建”的需求變化,則沒有必要使用抽象工廠模式,這時
29、候使用簡單的靜態(tài)工廠完全可以。 系列對象指的是這些對象之間有相互依賴、或作用的關(guān)系,例如游戲開發(fā)場景中的“道路”與“房屋”的依賴,“道路”與“地道”的依賴。 抽象工廠模式經(jīng)常和工廠方法模式共同組合來應(yīng)對“對象創(chuàng)建”的需求變化。,設(shè)計模式之抽象工廠模式,通常在運行時刻創(chuàng)建一個具體工廠類的實例,這一具體工廠的創(chuàng)建具有特定實現(xiàn)的產(chǎn)品對象,為創(chuàng)建不同的產(chǎn)品對象,客戶應(yīng)使用不同的具體工廠。 把工廠作為單件,一個應(yīng)用中一般每個產(chǎn)品系列只需一個具體工廠的實例,因此,工廠通常最好實現(xiàn)為一個單件模式。 創(chuàng)建產(chǎn)品,抽象工廠僅聲明一個創(chuàng)建產(chǎn)品的接口,真正創(chuàng)建產(chǎn)品是由具體產(chǎn)品類創(chuàng)建的,最通常的一個辦法是為每一個產(chǎn)品
30、定義一個工廠方法,一個具體的工廠將為每個產(chǎn)品重定義該工廠方法以指定產(chǎn)品,雖然這樣的實現(xiàn)很簡單,但它確要求每個產(chǎn)品系列都要有一個新的具體工廠子類,即使這些產(chǎn)品系列的差別很小。,設(shè)計模式之抽象工廠模式,優(yōu)點 分離了具體的類。抽象工廠模式幫助你控制一個應(yīng)用創(chuàng)建的對象的類,因為一個工廠封裝創(chuàng)建產(chǎn)品對象的責任和過程。它將客戶和類的實現(xiàn)分離,客戶通過他們的抽象接口操縱實例,產(chǎn)品的類名也在具體工廠的實現(xiàn)中被分離,它們不出現(xiàn)在客戶代碼中。 它使得易于交換產(chǎn)品系列。一個具體工廠類在一個應(yīng)用中僅出現(xiàn)一次即在它初始化的時候。這使得改變一個應(yīng)用的具體工廠變得很容易。它只需改變具體的工廠即可使用不同的產(chǎn)品配置,這是因為
31、一個抽象工廠創(chuàng)建了一個完整的產(chǎn)品系列,所以整個產(chǎn)品系列會立刻改變。 它有利于產(chǎn)品的一致性。當一個系列的產(chǎn)品對象被設(shè)計成一起工作時,一個應(yīng)用一次只能使用同一個系列中的對象,這一點很重要,而抽象工廠很容易實現(xiàn)這一點。,設(shè)計模式之抽象工廠模式,缺點 難以支持新種類的產(chǎn)品。難以擴展抽象工廠以生產(chǎn)新種類的產(chǎn)品。這是因為抽象工廠幾口確定了可以被創(chuàng)建的產(chǎn)品集合,支持新種類的產(chǎn)品就需要擴展該工廠接口,這將涉及抽象工廠類及其所有子類的改變。,設(shè)計模式之抽象工廠模式,適用性 在以下情況下應(yīng)當考慮使用抽象工廠模式: 一個系統(tǒng)不應(yīng)當依賴于產(chǎn)品類實例如何被創(chuàng)建、組合和表達的細節(jié),這對于所有形態(tài)的工廠模式都是重要的。 這個系統(tǒng)有多于一個的產(chǎn)品族,而系統(tǒng)只消費其中某一產(chǎn)品族。 同屬于同一個產(chǎn)品族的產(chǎn)品是在一起使用的,這一約束必須在系統(tǒng)的設(shè)計中體現(xiàn)出來。 系統(tǒng)提供一個產(chǎn)品類的庫,所有的產(chǎn)品以同樣的接口出現(xiàn),從而使客戶端不依賴于實現(xiàn)。,設(shè)計模式之抽象工廠模式,應(yīng)用場景 支持多種觀感標準的用戶界面工具箱(Kit)。 游戲開發(fā)中的多風格系列場景,比如道路,房屋,管道等。 ,設(shè)計模式之抽象工廠模式,總結(jié) 總之,抽象工廠模式提供了一個創(chuàng)建一系列相關(guān)或相互依賴對象的接口,運用抽象工廠模式的關(guān)鍵點在于應(yīng)對“多系列對象創(chuàng)建”的需求變化。一句話,學會了抽象工廠模式,你將理解OOP的精華:面向接口編程。,
- 溫馨提示:
1: 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
2: 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
3.本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
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. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 指向核心素養(yǎng)發(fā)展的高中生物學1輪復(fù)習備考建議
- 新課程新評價新高考導向下高三化學備考的新思考
- 新時代背景下化學高考備考策略及新課程標準的高中化學教學思考
- 2025屆江西省高考政治二輪復(fù)習備考建議
- 新教材新高考背景下的化學科學備考策略
- 新高考背景下的2024年高考化學二輪復(fù)習備考策略
- 2025屆高三數(shù)學二輪復(fù)習備考交流會課件
- 2025年高考化學復(fù)習研究與展望
- 2024年高考化學復(fù)習備考講座
- 2025屆高考數(shù)學二輪復(fù)習備考策略和方向
- 2024年感動中國十大人物事跡及頒獎詞
- XX教育系統(tǒng)單位述職報告教育工作概述教育成果展示面臨的挑戰(zhàn)未來規(guī)劃
- 2025《增值稅法》全文解讀學習高質(zhì)量發(fā)展的增值稅制度規(guī)范增值稅的征收和繳納
- 初中資料:400個語文優(yōu)秀作文標題
- 初中語文考試專項練習題(含答案)