結(jié)構(gòu)型設(shè)計模式培訓(xùn)_第1頁
結(jié)構(gòu)型設(shè)計模式培訓(xùn)_第2頁
結(jié)構(gòu)型設(shè)計模式培訓(xùn)_第3頁
結(jié)構(gòu)型設(shè)計模式培訓(xùn)_第4頁
結(jié)構(gòu)型設(shè)計模式培訓(xùn)_第5頁
已閱讀5頁,還剩30頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、結(jié)構(gòu)型設(shè)計模式結(jié)構(gòu)型設(shè)計模式主講人:高國生2結(jié)構(gòu)型設(shè)計模式2設(shè)計模式l 創(chuàng)建型l 結(jié)構(gòu)型l 行為型大家都知道哪些結(jié)構(gòu)型設(shè)計模式?為了可重用代碼、讓代碼更容易被他人理解、保證代碼可靠性3結(jié)構(gòu)型設(shè)計模式31.手機(jī)有蘋果,三星,黑莓。軟件有QQ,微信。如何組合最簡單?2.文件夾下有文件夾和實體文件,怎么樣描述它們之間的關(guān)系?3.家庭電壓是220V,手機(jī)電壓是5V,如何用220V的電壓為5V電壓的手機(jī)充電呢?場景4結(jié)構(gòu)型設(shè)計模式4結(jié)構(gòu)型設(shè)計模式l Bridge(橋接模式)l Composite(組合模式)l Adapter(適配器模式)l Decorator(裝飾模式)l Facade(外觀模式,門面

2、模式)l Flyweight(享元模式)l Proxy(代理模式)創(chuàng)建型設(shè)計模式之橋接模式(Bridge)5橋接模式橋接模式將抽象部分與它的實現(xiàn)部分分離,橋接模式將抽象部分與它的實現(xiàn)部分分離,是它們都可以獨立地變化。是它們都可以獨立地變化。 它很好的支持了開閉原則和組合鋸和復(fù)用原則。實現(xiàn)系統(tǒng)可能有多角度分類,每一種分類都有可能變化,那么就把這些多角度分離出來讓他們獨立變化,減少他們之間的耦合。創(chuàng)建型設(shè)計模式之橋接模式(Bridge)6示例創(chuàng)建型設(shè)計模式之橋接模式(Bridge)7類結(jié)構(gòu)圖創(chuàng)建型設(shè)計模式之橋接模式(Bridge)81、避免抽象方法和其實現(xiàn)方法綁定在一起。2、抽象接口和它的實現(xiàn)都需

3、要擴(kuò)展出子類以備使用3、變動實現(xiàn)的方法根本不會影響客戶程序調(diào)用的部分(甚至不用重新編譯)1、橋接模式可以從接口分離實現(xiàn)功能,使得設(shè)計更具有擴(kuò)展性,這樣,客戶調(diào)用方法是根本不需要知道實現(xiàn)的細(xì)節(jié)。橋接模式是減少了子類,如果程序中要在2個操作系統(tǒng)中實現(xiàn)查看6種圖像格式,那么就會有2*6個類。使用橋接模式時候就會變成2+6個類了,它使代碼變得更清潔了,生成的執(zhí)行程序更小了。2、但是橋接模式的缺陷是抽象類與實現(xiàn)類的雙向連接使得運行速度變慢了。 使用場景優(yōu)缺點創(chuàng)建型設(shè)計模式之組合模式(Composite)9組合模式將對象組合成樹形結(jié)構(gòu)以表示部分-整體的層次結(jié)構(gòu),組合模式使得用戶對單個對象和組合對象的使用具

4、有一致性。組合模式 就比如文件夾和文件的關(guān)系一樣。有些雖然結(jié)構(gòu)復(fù)雜,但是操作簡單,只需要進(jìn)行簡單的遞歸調(diào)用即可。創(chuàng)建型設(shè)計模式之組合模式(Composite)10公司=八個部門+經(jīng)理,副經(jīng)理,每個部門=多個組+項目經(jīng)理,組長。 讓用戶一致地使用單個對象和組合對象,1+2和(1+1)+(2*3)都是合法的表達(dá)式。 單個與整體都可以進(jìn)行加法運算符的操作。示例創(chuàng)建型設(shè)計模式之組合模式(Composite)11類結(jié)構(gòu)圖創(chuàng)建型設(shè)計模式之組合模式(Composite)121、你想表示對象的部分-整體層次結(jié)構(gòu)2、你希望用戶忽略組合對象與單個對象的不同,用戶將統(tǒng)一地使用組合結(jié)構(gòu)中的所有對象。使用場景結(jié)構(gòu)型設(shè)計

5、模式之適配器模式(Adapter)13適配器模式適配器模式是將一個類的接口轉(zhuǎn)換成客戶希適配器模式是將一個類的接口轉(zhuǎn)換成客戶希望的另外一個接口。適配器模式使得原本由于望的另外一個接口。適配器模式使得原本由于接口不兼容而不能一起工作的那些類可以一起接口不兼容而不能一起工作的那些類可以一起工作。工作。創(chuàng)建型設(shè)計模式之適配器模式(Adapter)14示例創(chuàng)建型設(shè)計模式之適配器模式(Adapter)15類結(jié)構(gòu)圖創(chuàng)建型設(shè)計模式之適配器模式(Adapter)161、系統(tǒng)需要使用現(xiàn)有的類,而此類的接口不符合系統(tǒng)的需要2、想要建立一個可以重復(fù)使用的類,用于與一些彼此之間沒有太大關(guān)聯(lián)的一些類,包括一些可能在將來引

6、進(jìn)的類一起工作。這些源類不一定有很復(fù)雜的接口。 1、在設(shè)計里,需要改變多個已有子類的接口,如果使用類的適配器模式,就要針對每一個子類做一個適配器,而這不太實際。使用場景適優(yōu)缺點創(chuàng)建型設(shè)計模式之裝飾模式(Decorator)17裝飾模式動態(tài)地給一個對象添加一些額裝飾模式動態(tài)地給一個對象添加一些額外的職責(zé),就增加功能來說,它比生成子外的職責(zé),就增加功能來說,它比生成子類更靈活。類更靈活。裝飾模式 也可以這樣說,裝飾模式把復(fù)雜類中的核心職責(zé)和裝飾功能區(qū)分開了,這樣既簡化了復(fù)雜類,有去除了相關(guān)類中重復(fù)的裝飾邏輯。裝飾模式?jīng)]有通過繼承原有類來擴(kuò)展功能,但卻達(dá)到了一樣的目的,而且比繼承更加靈活,所以可以說

7、裝飾模式是繼承關(guān)系的一種替代方案。創(chuàng)建型設(shè)計模式之裝飾模式(Decorator)18示例創(chuàng)建型設(shè)計模式之裝飾模式(Decorator)19類結(jié)構(gòu)圖創(chuàng)建型設(shè)計模式之裝飾模式(Decorator)201、需要擴(kuò)展一個類的功能,或給一個類增加附加責(zé)任2、需要動態(tài)地給一個對象增加功能,這些功能可以再動態(tài)地撤銷3、需要增加由一些基本功能的排列組合而產(chǎn)生的非常大量的功能,從而使繼承關(guān)系變得不現(xiàn)使用場景創(chuàng)建型設(shè)計模式之裝飾模式(Decorator)211、A裝飾模式與繼承關(guān)系的目的都是要擴(kuò)展對象的功能,但是裝飾模式可以提供比繼承更多的靈活性。 B通過使用不同的具體裝飾類以及這些裝飾類的排列組合,設(shè)計師可以創(chuàng)

8、造出很多不同行為的組合。 C這種比繼承更加靈活機(jī)動的特性,也同時意味著裝飾模式比繼承更加易于出錯。2、由于使用裝飾模式,可以比使用繼承關(guān)系需要較少數(shù)目的類。使用較少的類,當(dāng)然使設(shè)計比較易于進(jìn)行。但是,在另一方面,使用裝飾模式會產(chǎn)生比使用繼承關(guān)系更多的對象。更多的對象會使得查錯變得困難,特別是這些對象看上去都很相像。 優(yōu)缺點創(chuàng)建型設(shè)計模式之外觀模式(Facade)22示例創(chuàng)建型設(shè)計模式之外觀模式(Facade)23外觀模式 為子系統(tǒng)中的一組接口提供一個一致的界面為子系統(tǒng)中的一組接口提供一個一致的界面,F(xiàn)acade模式定義了一個高層接口,這個接口模式定義了一個高層接口,這個接口使得這些子系統(tǒng)更加容

9、易使用。使得這些子系統(tǒng)更加容易使用。創(chuàng)建型設(shè)計模式之享元模式(Flyweight)24享元模式 定義共享類工廠,通過共享類工廠提供的索引來獲取相定義共享類工廠,通過共享類工廠提供的索引來獲取相應(yīng)的對象(有點類似創(chuàng)建型模式)。應(yīng)的對象(有點類似創(chuàng)建型模式)。 享元模式為運用共享技術(shù)有效的支持大量細(xì)粒度的對象。因為它可以通過共享大幅度地減少單個實例的數(shù)目,避免了大量非常相似類的開銷。 享元模式是一個類別的多個對象共享這個類別的一個對象,而不是各自再實例化各自的對象。這樣就達(dá)到了節(jié)省內(nèi)存的目的。創(chuàng)建型設(shè)計模式之裝飾模式25示例創(chuàng)建型設(shè)計模式之享元模式(Flyweight)26類結(jié)構(gòu)圖創(chuàng)建型設(shè)計模式之

10、享元模式(Flyweight)271、一個系統(tǒng)有大量的對象2、這些對象耗費大量的內(nèi)存3、這些對象的狀態(tài)中的大部分都可以外部化。4、這些對象可以按照內(nèi)蘊狀態(tài)分成很多的組,當(dāng)把外蘊對象從對象中剔除時,每一個組都可以僅用一個對象代替。5、軟件系統(tǒng)不依賴于這些對象的身份,換言之,這些對象可以是不可分辨的。使用場景創(chuàng)建型設(shè)計模式之代理模式28 通過代理類為實體定義接口,隱藏真通過代理類為實體定義接口,隱藏真實對象。實對象。(需要訪問某一個類,但是又不用需要訪問某一個類,但是又不用知道該類具體結(jié)構(gòu)知道該類具體結(jié)構(gòu))代理模式創(chuàng)建型設(shè)計模式之代理模式(Proxy)29示例創(chuàng)建型設(shè)計模式之代理模式(Proxy)

11、30類結(jié)構(gòu)圖創(chuàng)建型設(shè)計模式之代理模式311、遠(yuǎn)程(Remote)代理:為一個位于不同的地址空間的對象提供一個局域代表對象。比如:你可以將一個在世界某個角落一臺機(jī)器通過代理假象成你局域網(wǎng)中的一部分。2、虛擬(Virtual)代理:根據(jù)需要將一個資源消耗很大或者比較復(fù)雜的對象延遲的真正需要時才創(chuàng)建。比如:如果一個很大的圖片,需要花費很長時間才能顯示出來,那么當(dāng)這個圖片包含在文檔中時,使用編輯器或瀏覽器打開這個文檔,這個大圖片可能就影響了文檔的閱讀,這時需要做個圖片Proxy來代替真正的圖片。3、保護(hù)(Protect or Access)代理:控制對一個對象的訪問權(quán)限。比如:在論壇中,不同的身份登陸

12、,擁有的權(quán)限是不同的,使用代理模式可以控制權(quán)限(當(dāng)然,使用別的方式也可以實現(xiàn))。4、智能引用(Smart Reference)代理:提供比對目標(biāo)對象額外的服務(wù)。比如:紀(jì)錄訪問的流量(這是個再簡單不過的例子),提供一些友情提示等等。使用場景創(chuàng)建型設(shè)計模式之32 代理的客戶對象無法直接訪問目標(biāo)對象,代理對象提供對單獨目標(biāo)對象的訪問控制,而外觀模式的客戶對象可以直接訪問子系統(tǒng)中的各個對象,但通常由外觀對象提供對子系統(tǒng)個元件功能的簡化的共同層次的調(diào)用接口。代理模式與外觀模式的區(qū)別代理模式與外觀模式的區(qū)別創(chuàng)建型設(shè)計模式之33代理模式與適配器的區(qū)別代理模式與適配器的區(qū)別二者都屬于一種銜接性質(zhì)的功能。代理對象和被代理對象的接口是同一個,但是客戶沒法直接訪問被代理者,只能通過代理對象去

溫馨提示

  • 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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論