電工與電子技術(shù)電子商務(wù)電子課件軟件設(shè)計(jì)模式課件-結(jié)構(gòu)型模式ppt_第1頁(yè)
電工與電子技術(shù)電子商務(wù)電子課件軟件設(shè)計(jì)模式課件-結(jié)構(gòu)型模式ppt_第2頁(yè)
電工與電子技術(shù)電子商務(wù)電子課件軟件設(shè)計(jì)模式課件-結(jié)構(gòu)型模式ppt_第3頁(yè)
電工與電子技術(shù)電子商務(wù)電子課件軟件設(shè)計(jì)模式課件-結(jié)構(gòu)型模式ppt_第4頁(yè)
電工與電子技術(shù)電子商務(wù)電子課件軟件設(shè)計(jì)模式課件-結(jié)構(gòu)型模式ppt_第5頁(yè)
已閱讀5頁(yè),還剩52頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、電子課件軟件設(shè)計(jì)模式課件-結(jié)構(gòu)型模式第4章 結(jié)構(gòu)型模式 本章主要介紹以下結(jié)構(gòu)型設(shè)計(jì)模式外觀模式適配器模式橋接模式裝飾模式第4章 結(jié)構(gòu)型模式之外觀模式 在本節(jié)中,我們將:解釋Facade模式是什么,并結(jié)合具體問(wèn)題分析; 給出外觀模式應(yīng)用的幾種情形; 給出外觀模式的關(guān)鍵特征;給出java的實(shí)現(xiàn)代碼供同學(xué)們參考。4.1 外觀模式4.1.1 概述3第4章 結(jié)構(gòu)型模式之外觀模式 外觀模式(Facade)又稱(chēng)門(mén)面模式,是一種對(duì)象結(jié)構(gòu)型設(shè)計(jì)模式。在設(shè)計(jì)模式一書(shū)中對(duì)Facade模式的意圖敘述如下:為子系統(tǒng)中的一組接口提供一個(gè)統(tǒng)一接口。Facade模式定義了一個(gè)更高層的接口,使子系統(tǒng)更加容易使用。這段話(huà)的大致意

2、思是說(shuō):Facade模式定義了一個(gè)更高層的接口來(lái)簡(jiǎn)化子系統(tǒng)的使用,為子系統(tǒng)調(diào)用提供一個(gè)統(tǒng)一的入口。 例如:在淘寶網(wǎng)店或?qū)嶓w店購(gòu)買(mǎi)手機(jī)。一般有以下3個(gè)步驟:第一是選擇手機(jī)品牌,第二是選擇手機(jī)型號(hào),第三是下單購(gòu)買(mǎi)。4.1.2外觀模式應(yīng)用需求4第4章 結(jié)構(gòu)型模式之外觀模式4.1.3 外觀模式解決方案 當(dāng)沒(méi)有使用外觀模式時(shí),買(mǎi)家(一般稱(chēng)為客戶(hù))需要直接使用三個(gè)購(gòu)買(mǎi)步驟。第4章 結(jié)構(gòu)型模式之外觀模式 不足之處: 子系統(tǒng)接口復(fù)雜,使用繁瑣。 違反了迪米特法則(Lod)。(private 屬性減少依賴(lài)) 解決方案 使用外觀模式解決顧客的一站式服務(wù)。 通過(guò)外觀模式的學(xué)習(xí),針對(duì)有復(fù)雜子系統(tǒng)的設(shè)計(jì),為了簡(jiǎn)化客戶(hù)端

3、的使用和隔離子系統(tǒng)的變化,在設(shè)計(jì)時(shí)會(huì)對(duì)其進(jìn)行一個(gè)外觀模式的包裝 (購(gòu)物助手),這樣就可以解決上述問(wèn)題。第4章 結(jié)構(gòu)型模式之外觀模式 在上面的使用過(guò)程中,Client直接和子系統(tǒng)進(jìn)行交互。當(dāng)子系統(tǒng)發(fā)生變化時(shí),大概率會(huì)影響到Client的調(diào)用。而且在子系統(tǒng)的不斷優(yōu)化、更新中,系統(tǒng)的復(fù)雜性會(huì)很大提升。這對(duì)Client來(lái)說(shuō)非常不利。 所以要解決上面所遇到的問(wèn)題,必須簡(jiǎn)化考慮子系統(tǒng)調(diào)用的過(guò)程。這其實(shí)就是外觀模式的意圖:希望簡(jiǎn)化原有系統(tǒng)的使用方式,需要定義自己的接口。第4章 結(jié)構(gòu)型模式之外觀模式 在上面的使用過(guò)程中,Client直接和子系統(tǒng)進(jìn)行交互。當(dāng)子系統(tǒng)發(fā)生變化時(shí),大概率會(huì)影響到Client的調(diào)用。而

4、且在子系統(tǒng)的不斷優(yōu)化、更新中,系統(tǒng)的復(fù)雜性會(huì)很大提升。這對(duì)Client來(lái)說(shuō)非常不利。 所以要解決上面所遇到的問(wèn)題,必須簡(jiǎn)化考慮子系統(tǒng)調(diào)用的過(guò)程。這其實(shí)就是外觀模式的意圖:希望簡(jiǎn)化原有系統(tǒng)的使用方式,需要定義自己的接口。第4章 結(jié)構(gòu)型模式之外觀模式 使用外觀模式后解決方案如下:第4章 結(jié)構(gòu)型模式之外觀模式 Facade模式:關(guān)鍵特征 意圖:希望簡(jiǎn)化現(xiàn)有系統(tǒng)的使用方法。需要定義自己的接口。 問(wèn)題:只需要使用一個(gè)復(fù)雜系統(tǒng)的一個(gè)子集?;蛘?,需要用一種 特殊的方法 與系統(tǒng)交互。 解決方案:Facade向客戶(hù)展現(xiàn)使用現(xiàn)有系統(tǒng)的一個(gè)新的接口。 參與者與協(xié)作者:向客戶(hù)展現(xiàn)一個(gè)定制的接口,讓客戶(hù)更容易地 使用現(xiàn)

5、有系統(tǒng)。 效果: 簡(jiǎn)化了所需子系統(tǒng)的使用,但某些功能對(duì)子系統(tǒng)是不可用的。 實(shí)現(xiàn):定義一個(gè)(或一組)新的類(lèi)來(lái)提供所需的接口。4.1.4 學(xué)習(xí)Facade模式10第4章 結(jié)構(gòu)型模式之外觀模式 1) Facade不僅可以為方法的調(diào)用創(chuàng)建簡(jiǎn)單的接口,還可以減少客戶(hù)必須處理的對(duì)象數(shù)量。 2) Facade模式的變體:一個(gè)封裝層 Facade模式用于隱藏或包裝原有的系統(tǒng)。 Facade可以把原有系統(tǒng)作為自己的私有成員。原有系統(tǒng)與Facade類(lèi)聯(lián)系在一起,但使用Facade的客戶(hù)無(wú)法看到原有的系統(tǒng)。 4.1.5 備注:Facade模式11第4章 結(jié)構(gòu)型模式之外觀模式 需要包裝原有系統(tǒng)的理由: 跟蹤對(duì)系統(tǒng)的使

6、用強(qiáng)迫所有客戶(hù)通過(guò) Facade使 用原有系統(tǒng),然后就可以很容易地監(jiān)控對(duì)系統(tǒng)的使用了。 改變系統(tǒng)在未來(lái)需要的時(shí)候?qū)ο到y(tǒng)進(jìn)行改變。12第4章 結(jié)構(gòu)型模式之外觀模式 Facade模式適用場(chǎng)合: 不需要使用一個(gè)復(fù)雜系統(tǒng)的所有功能。 希望包裝或隱藏原有系統(tǒng)。 希望使用原有系統(tǒng)的功能,并希望增加一些 新的功能。 編寫(xiě)一個(gè)新的類(lèi)的代價(jià)“小于讓所有人學(xué)會(huì)使 用原有系統(tǒng)”或“在未來(lái)維護(hù)整個(gè)系統(tǒng)”所需的 代價(jià)。4.1.6 Facade模式適用場(chǎng)合13第4章結(jié)構(gòu)型模式之Adapter模式 在本節(jié)中,我們將:說(shuō)明Adapter模式是什么,以及怎樣應(yīng)用;給出適配器模式的應(yīng)用擴(kuò)展;給出適配器模式的關(guān)鍵特征;給出java

7、代碼來(lái)幫助同學(xué)們理解和學(xué)習(xí)。 4.2 適配器模式14第4章結(jié)構(gòu)型模式之Adapter模式 按照四人團(tuán)的說(shuō)法,Adapter模式的意圖是:將一個(gè)類(lèi)的接口轉(zhuǎn)換成用戶(hù)希望的另一個(gè)接口,Adapter模式使原本由于接口不兼容而不能在一起工作的那些類(lèi)可以一起工作。 這段話(huà)的主要意思是:我們需要一種方法,為一個(gè)內(nèi)容合適但接口不匹配的對(duì)象創(chuàng)建一個(gè)新的接口。 4.2.1 適配器模式應(yīng)用需求15第4章結(jié)構(gòu)型模式之Adapter模式 假設(shè)客戶(hù)要開(kāi)發(fā)一款畫(huà)圖軟件,在項(xiàng)目開(kāi)發(fā)初期約定開(kāi)發(fā)三個(gè)畫(huà)圖模塊:甘特圖模塊(Gantt)、數(shù)據(jù)流圖模塊(DataFlow)和網(wǎng)絡(luò)圖模塊(Network)。在三個(gè)模塊開(kāi)發(fā)完成后,客戶(hù)突

8、然要求加一個(gè)UML模塊。因?yàn)槿肆Τ杀竞凸て趯⒔雀鞣N原因,開(kāi)發(fā)一個(gè)新的UML模塊已然來(lái)不及。這時(shí)開(kāi)發(fā)程序員小劉發(fā)現(xiàn)網(wǎng)上有已經(jīng)實(shí)現(xiàn)的UML模塊接口,但是和本項(xiàng)目的接口不兼容。 怎么辦? 4.2.1 適配器模式應(yīng)用需求16第4章結(jié)構(gòu)型模式之Adapter模式4.2.3對(duì)象適配器模式解決方案 針對(duì)接口不兼容的問(wèn)題,一般采用適配器模式來(lái)解決。適配器模式又分為對(duì)象適配器模式和類(lèi)適配器模式。 適配器模式一般包含以下主要角色。 目標(biāo)接口(Target):當(dāng)前系統(tǒng)業(yè)務(wù)所期待的接口,它可以是抽象類(lèi)或接口。 適配者(Adaptee)類(lèi):它是被訪問(wèn)和適配的現(xiàn)存組件庫(kù)中的組件接口。 適配器(Adapter)類(lèi):它是一

9、個(gè)轉(zhuǎn)換器,通過(guò)繼承或引用適配者的對(duì)象,把適配者接口轉(zhuǎn)換成目標(biāo)接口,讓客戶(hù)按目標(biāo)接口的格式訪問(wèn)適配者。17第4章結(jié)構(gòu)型模式之Adapter模式 上面問(wèn)題中,目標(biāo)接口就是畫(huà)圖軟件(Draw), 適配者類(lèi)就是UML模塊,適配器類(lèi)可以理解為一個(gè)可以將UML模塊與Draw兼容的轉(zhuǎn)換器。18第4章結(jié)構(gòu)型模式之Adapter模式19第4章結(jié)構(gòu)型模式之Adapter模式類(lèi)Adapter模式:Adapter類(lèi)繼承了UML類(lèi)20第4章結(jié)構(gòu)型模式之Adapter模式 適配器模式的優(yōu)點(diǎn): (1)解耦目標(biāo)類(lèi)和適配者類(lèi),通過(guò)引入適配器類(lèi)復(fù)用適配者類(lèi),無(wú)需修改源代碼。 (2)對(duì)客戶(hù)端來(lái)說(shuō),封裝了適配者類(lèi)的實(shí)現(xiàn)細(xì)節(jié),增加了類(lèi)

10、的透明性和復(fù)用性。 (3)可以方便的更換適配器類(lèi),也可以不修改源代碼增加新的適配器類(lèi),符合開(kāi)閉原則。 21第4章結(jié)構(gòu)型模式之Adapter模式4.2.4 適配器模式應(yīng)用擴(kuò)展 適配器模式(Adapter)可擴(kuò)展為雙向適配器模式,雙向適配器類(lèi)既可以用目標(biāo)接口對(duì)象訪問(wèn)適配者,也可以用適配者對(duì)象訪問(wèn)目標(biāo)接口。22第4章結(jié)構(gòu)型模式之Adapter模式 意圖:將一個(gè)無(wú)法控制的現(xiàn)有對(duì)象與一個(gè)特定接口相匹配。 問(wèn)題:一個(gè)系統(tǒng)擁有正確的數(shù)據(jù)和行為,但接口卻是錯(cuò)誤的。 解決方案:Adapter 模式用我們需要的接口對(duì)無(wú)法修改的類(lèi)進(jìn)行包裝。 參與者與協(xié)作者:Adapter 對(duì)Adaptee 的接口進(jìn)行適配,使它與T

11、arget 相匹配。讓Client把Adaptee當(dāng)作Target的一個(gè)類(lèi)型來(lái)使用。 效果: Adapter模式讓現(xiàn)存的對(duì)象適應(yīng)新的類(lèi)結(jié)構(gòu),而不受它們的接 口限制。 實(shí)現(xiàn):將現(xiàn)存的類(lèi)包含在另一個(gè)類(lèi)之中。包容類(lèi)與需要的接口相匹 配,并調(diào)用被包容類(lèi)的方法。4.2.5 Adapter 模式:關(guān)鍵特征 23第4章結(jié)構(gòu)型模式之Adapter模式Adapter與Facade模式的比較: 包裝器和對(duì)象包裝器都是經(jīng)常使用的術(shù)語(yǔ)。一種常見(jiàn)的思考是使用對(duì)象對(duì)遺留工程進(jìn)行包裝,使它們更容易使用。Adapter與Facade模式的比較Facade模式Adapter模式是否有現(xiàn)存的類(lèi)是是是否必須對(duì)某個(gè)接口進(jìn)行設(shè)計(jì)否是一

12、個(gè)對(duì)象是否需要多態(tài)行為否可能是否需要一個(gè)更簡(jiǎn)單的接口是否結(jié)論:Facade模式簡(jiǎn)化接口處理,而Adapter模式將接口轉(zhuǎn)換成另一個(gè)接口。24第4章 結(jié)構(gòu)型模式之Bridge模式4.3.1 概述 在本節(jié)中,我們將:說(shuō)明Bridge模式是什么,以及怎樣應(yīng)用;給出橋接模式的更多討論;給出橋接模式的關(guān)鍵特征;給出java代碼來(lái)幫助同學(xué)們理解和學(xué)習(xí);25第4章 結(jié)構(gòu)型模式之Bridge模式4.3.2橋接模式應(yīng)用需求 根據(jù) 四人團(tuán)的說(shuō)話(huà),Bridge模式的意圖是將抽象部分與抽象方法的實(shí)現(xiàn)相分離,使它們可以獨(dú)立地變化。分離是讓各部分的行為各自獨(dú)立,或至少顯式指出關(guān)聯(lián)。抽象部分是指不同的事物在概念層次上的聯(lián)系

13、。很明顯,我的迷惑主要來(lái)自我對(duì)“抽象方法的實(shí)現(xiàn)”這個(gè)詞的誤解;這里實(shí)現(xiàn)指的是抽象類(lèi)及其派生類(lèi)用來(lái)實(shí)現(xiàn)自己的對(duì)象。(而不僅是抽象類(lèi)的派生類(lèi)) Bridge模式是最難理解的模式之一,這部分是因?yàn)樗耐θ绱藦?qiáng)大、適應(yīng)的范圍如此廣泛。 26第4章 結(jié)構(gòu)型模式之Bridge模式 為筆記本電腦生產(chǎn)商建立一個(gè)筆記本電腦管理模型,要求對(duì)各個(gè)品牌的筆記本電腦進(jìn)行管理。 為了簡(jiǎn)化模型以及更好理解問(wèn)題,先假設(shè)有兩種品牌的筆記本電腦:聯(lián)想(Lenovo)以及戴爾(Dell),并且這兩個(gè)品牌的筆記本電腦有廣達(dá)(Quanta)和仁寶(Compal)這兩個(gè)代工廠來(lái)生產(chǎn)。27第4章 結(jié)構(gòu)型模式之Bridge模式4.3.3

14、橋接模式解決方案 (1) 通過(guò)繼承方法 通過(guò)引入一個(gè)抽象類(lèi)Lenovo,從上圖可以看出,不同的Lenovo對(duì)象之間的差異是如何實(shí)現(xiàn)ProduceLenovo方法。通過(guò)實(shí)例化正確的Lenovo,即可實(shí)現(xiàn)不同的ProduceLenovo方法。28第4章 結(jié)構(gòu)型模式之Bridge模式 現(xiàn)在還需要生產(chǎn)Dell筆記本電腦,要求客戶(hù)對(duì)象無(wú)需知道Lenovo和Dell的差異。我們加入一個(gè)叫做Brand的新類(lèi),并從中派生Lenovo類(lèi)和Dell類(lèi)。這樣Client對(duì)象可以只引用Brand對(duì)象,而不必考慮是哪種Brand類(lèi)。29第4章 結(jié)構(gòu)型模式之Bridge模式 在上述例子中,如果說(shuō)變化點(diǎn)是問(wèn)題領(lǐng)域中的特定具

15、體情況,共同點(diǎn)就定義了問(wèn)題領(lǐng)域中將具體情況捆綁在一起的概念。共同的概念將由抽象類(lèi)來(lái)表現(xiàn),而變化點(diǎn)分析發(fā)現(xiàn)的變化點(diǎn)將由具體類(lèi)來(lái)實(shí)現(xiàn)。 處理變化的策略是: 1)發(fā)現(xiàn)并封裝變化點(diǎn); 2)優(yōu)先使用對(duì)象聚合,而不是類(lèi)繼承。 30第4章 結(jié)構(gòu)型模式之Bridge模式 (2)通過(guò)橋接模式解決問(wèn)題 通過(guò)對(duì)問(wèn)題的分析要找到什么在發(fā)生變化,在這個(gè)問(wèn)題中變化的是筆記本電腦品牌的種類(lèi)和工廠的種類(lèi)。而共同的概念是“品牌”和“工廠”,這就是上面所說(shuō)的兩個(gè)獨(dú)立變化的維度。31第4章 結(jié)構(gòu)型模式之Bridge模式 之后需要表示具體的變化。Brand類(lèi)有聯(lián)想(Lenovo)以及戴爾(Dell),F(xiàn)actory分別有廣達(dá)(Qua

16、nta)和仁寶(Compal),如圖4-15所示。 Brand和Factory的具體變化32第4章 結(jié)構(gòu)型模式之Bridge模式 之后需要表示具體的變化。Brand類(lèi)有聯(lián)想(Lenovo)以及戴爾(Dell),F(xiàn)actory分別有廣達(dá)(Quanta)和仁寶(Compal),如圖4-15所示。 Brand和Factory的具體變化33第4章 結(jié)構(gòu)型模式之Bridge模式如果Brand類(lèi)使用Factory類(lèi)來(lái)生產(chǎn)品牌筆記本電腦,Brand對(duì)象無(wú)需知道所用Factory對(duì)象的類(lèi)型,因?yàn)榭梢宰孊rand引用Factory類(lèi)。 Brand使用Factory34第4章 結(jié)構(gòu)型模式之Bridge模式加入Fa

17、ctory對(duì)象的橋接模式結(jié)構(gòu)圖35第4章 結(jié)構(gòu)型模式之Bridge模式 一條規(guī)則,一個(gè)地方的原則:一條規(guī)則只在一個(gè)地方實(shí)現(xiàn)。從方法的角度,這看起來(lái)與基于繼承的實(shí)現(xiàn)相似,其最大區(qū)別在于:現(xiàn)在的實(shí)現(xiàn)被放置在不同的對(duì)象中。 Bridge模式讓我發(fā)現(xiàn),把實(shí)現(xiàn)部分看成“對(duì)象外部的,被對(duì)象使用的某種東西。通過(guò)對(duì)調(diào)用程序隱藏實(shí)現(xiàn)部分的變化點(diǎn)。用這種方式設(shè)計(jì)對(duì)象。36第4章 結(jié)構(gòu)型模式之Bridge模式4.3.4 橋接模式的更多討論使用繼承設(shè)計(jì)的2個(gè)品牌和3個(gè)工廠(另一個(gè)工廠為緯創(chuàng)(Wistron)37第4章 結(jié)構(gòu)型模式之Bridge模式使用橋接模式設(shè)計(jì)的2個(gè)品牌和3個(gè)工廠思考? 在本例子中,品牌和工廠抽象類(lèi)

18、的聚合關(guān)系可以交換嗎?38第4章 結(jié)構(gòu)型模式之Bridge模式4.3.5 Bridge 模式關(guān)鍵特征 在使用Bridge模式時(shí),經(jīng)??匆?jiàn)Adapter模式被結(jié)合在Bridge模式中,但Adapter模式并不是Bridge模式的一部分。 Bridge模式關(guān)鍵特征 意圖:將一組實(shí)現(xiàn)部分從另一組使用它們的對(duì)象中分離出來(lái)。 問(wèn)題:一個(gè)抽象類(lèi)的派生類(lèi)必須使用多種實(shí)現(xiàn)部分,但又不能引起類(lèi)數(shù)量的爆炸。 解決方案:為所有的實(shí)現(xiàn)部分定義一個(gè)接口,讓抽象類(lèi)的派生類(lèi)使用這個(gè)接口。 39第4章 結(jié)構(gòu)型模式之Bridge模式 參與者與協(xié)作者:Abstraction為正在實(shí)現(xiàn)的對(duì)象定義接口,Implementor為特定的

19、實(shí)現(xiàn)部分定義接口。 效果:實(shí)現(xiàn)部分與實(shí)現(xiàn)它的對(duì)象的分離。 實(shí)現(xiàn): 將實(shí)現(xiàn)部分封裝在一個(gè)抽象類(lèi)中; 在被實(shí)現(xiàn)的抽象部分基類(lèi)中包含一個(gè)實(shí)現(xiàn)部分基類(lèi)的句柄。 另一件需要注意的是:表示抽象部分的對(duì)象(Shape對(duì)象)在實(shí)例化時(shí)獲得它們的實(shí)現(xiàn)部分,這不是Bridege模式中固有的部分,但這種情況非常普遍。 40第4章 結(jié)構(gòu)型模式之Bridge模式 即使我使用Bridge模式開(kāi)發(fā)出的解決方案遠(yuǎn)遠(yuǎn)優(yōu)于原來(lái)的解決方案,這也不夠完美。衡量一個(gè)設(shè)計(jì)質(zhì)量的一種方法就是:看它處理變化有多好。當(dāng)使用Bridge模式時(shí),處理一個(gè)新的實(shí)現(xiàn)部分是很容易的。 結(jié)論:模式并不是總能提供完美的解決方案。但是,因?yàn)槟J襟w現(xiàn)的是許多設(shè)

20、計(jì)者許多年集合而成的經(jīng)驗(yàn),所以它們通常比我們自己能提出的解決方案更好。41第4章 結(jié)構(gòu)型模式之Bridge模式 在學(xué)習(xí)Bridge模式的過(guò)程中,應(yīng)該遵循下列處理變化的基本策略:發(fā)現(xiàn)并封裝變化點(diǎn); 優(yōu)先使用對(duì)象組合而不是類(lèi)繼承。 42第4章 結(jié)構(gòu)型模式之Decorator模式 在本章中,我們將:說(shuō)明Decorator模式是什么,以及怎樣應(yīng)用;給出裝飾模式的動(dòng)態(tài)增加對(duì)象功能;給出裝飾模式的關(guān)鍵特征。4.4 概述第4章 結(jié)構(gòu)型模式之Decorator模式 在設(shè)計(jì)模式一書(shū)中對(duì)Decorator模式的意圖描述如下:動(dòng)態(tài)地給一個(gè)對(duì)象添加一些額外地職責(zé)。就增加功能來(lái)說(shuō),Decorator模式比生成子類(lèi)更為靈

21、活。這句話(huà)的大致意思為:當(dāng)為對(duì)象添加一些新功能時(shí),使用Decorator模式比使用繼承更加靈活。 例如:客戶(hù)要開(kāi)發(fā)一款畫(huà)圖軟件(Software),甘特圖(Gantt)模塊作為Software的一個(gè)子模塊現(xiàn)在已經(jīng)開(kāi)發(fā)完成??蛻?hù)臨時(shí)增加需求:要為Gantt模塊增加顏色功能。為了簡(jiǎn)化問(wèn)題,我們假定先增加兩種顏色:紅色(Red)和黑色(Black)。 4.4.1 裝飾模式應(yīng)用需求第4章 結(jié)構(gòu)型模式之Decorator模式 4.4.2 裝飾模式的解決方案 (1)通過(guò)繼承方法 通過(guò)繼承解決問(wèn)題,具體來(lái)講就是直接在Gantt派生Red和Black類(lèi),因?yàn)镚antt派生自畫(huà)圖軟件(Software),因此得

22、到以下類(lèi)圖。第4章 結(jié)構(gòu)型模式之Decorator模式 (2)通過(guò)裝飾模式解決問(wèn)題 按照四人團(tuán)的說(shuō)法, Decorators模式:動(dòng)態(tài)地給一個(gè)對(duì)象添加一些額外的職責(zé)。就增加功能來(lái)說(shuō), Decorators模式相比生成子類(lèi)更為靈活。 Decorators模式的作用效果是:創(chuàng)建以Decorators對(duì)象負(fù)責(zé)新的功能的對(duì)象開(kāi)始的一條對(duì)象鏈,并結(jié)束于最初的對(duì)象。Decrator1Decrator2Decrator3ConcreteCompDecrator 鏈第4章 結(jié)構(gòu)型模式之Decorator模式Decorator類(lèi)圖第4章 結(jié)構(gòu)型模式之Decorator模式 根據(jù)上面的問(wèn)題分析得出,Gantt模塊

23、是畫(huà)圖軟件(Software)的派生,即Gantt類(lèi)為Software的子類(lèi),如圖4-24所示。Software派生Gantt第4章 結(jié)構(gòu)型模式之Decorator模式 新建一個(gè)Decorator抽象類(lèi),其派生Red和Black類(lèi)為Gantt類(lèi)分別添加紅色(Red)和黑色(Black)功能,如下圖所示。圖 抽象裝飾類(lèi)派生具體裝飾 第4章 結(jié)構(gòu)型模式之Decorator模式 Decorator(抽象裝飾類(lèi))的主要功能是為Gantt (具體類(lèi))添加功能,所以Decorator和Gantt都派生自Software抽象類(lèi)。在裝飾模式中通過(guò)使用組合/聚合關(guān)系將Decorator和Gantt聯(lián)系起來(lái),因?yàn)?/p>

24、需求是Decorator要為Gantt增加功能,所以在Decorator中增加Software對(duì)象(所學(xué)設(shè)計(jì)模式中唯一特例:即聚合又繼承的關(guān)系)。具體實(shí)現(xiàn)類(lèi)下圖所示。第4章 結(jié)構(gòu)型模式之Decorator模式采用裝飾模式的解決方案第4章 結(jié)構(gòu)型模式之Decorator模式 我們可以從裝飾模式的角色入手來(lái)說(shuō)明裝飾模式動(dòng)態(tài)增加對(duì)象功能。裝飾模式主要包含以下角色。 抽象類(lèi)(Component)角色:定義一個(gè)抽象接口以規(guī)范準(zhǔn)備接收附加責(zé)任的對(duì)象。 具體類(lèi)(ConcreteComponent)角色:實(shí)現(xiàn)抽象類(lèi),通過(guò)抽象裝飾角色為其添加一些職責(zé)。 抽象裝飾(Decorator)角色:繼承抽象類(lèi),并包含具體類(lèi)的實(shí)例,可以通過(guò)其子類(lèi)擴(kuò)展具體類(lèi)的功能。 具體裝飾(ConcreteDecorator)角色:實(shí)現(xiàn)抽象裝飾的相關(guān)方法,并給具體類(lèi)對(duì)象添加附加的責(zé)任4.4.4 應(yīng)用裝飾模式動(dòng)態(tài)增加對(duì)象功能第4章 結(jié)構(gòu)型模式之Dec

溫馨提示

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

評(píng)論

0/150

提交評(píng)論