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

下載本文檔

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

文檔簡介

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

溫馨提示

  • 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. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論