設(shè)計模式系列講座一_第1頁
設(shè)計模式系列講座一_第2頁
設(shè)計模式系列講座一_第3頁
設(shè)計模式系列講座一_第4頁
設(shè)計模式系列講座一_第5頁
已閱讀5頁,還剩30頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

設(shè)計模式系列講座一第一頁,共三十五頁,編輯于2023年,星期三設(shè)計模式概述

什么是設(shè)計模式?模式,即pattern。其實就是解決某一類問題的方法論。你把解決某類問題的方法總結(jié)歸納到理論高度,那就是模式。經(jīng)典定義是:每個模式都描述了一個在我們的環(huán)境中不斷出現(xiàn)的問題,然后描述了該問題的解決方案的核心。通過這種方式,你可以無數(shù)次地使用那些已有的解決方案,無需在重復(fù)相同的工作。模式有不同的領(lǐng)域,建筑領(lǐng)域有建筑模式,軟件設(shè)計領(lǐng)域也有設(shè)計模式。當(dāng)一個領(lǐng)域逐漸成熟的時候,自然會出現(xiàn)很多模式。

第二頁,共三十五頁,編輯于2023年,星期三設(shè)計模式概述

為什么要使用模式?因為模式是一種指導(dǎo),在一個良好的指導(dǎo)下,有助于你完成任務(wù),有助于你作出一個優(yōu)良的設(shè)計方案,達到事半功倍的效果。而且會得到解決問題的最佳辦法。設(shè)計模式使人們可以更加簡單方便地復(fù)用成功的設(shè)計和體系結(jié)構(gòu)。第三頁,共三十五頁,編輯于2023年,星期三設(shè)計模式概述模式的四個基本要素

1.模式名稱(patternname)2.問題(problem)3.解決方案(solution)4.效果(consequences)第四頁,共三十五頁,編輯于2023年,星期三四個基本要素1.模式名稱(patternname)一個助記名,它用一兩個詞來描述模式的問題、解決方案和效果。命名一個新的模式增加了我們的設(shè)計詞匯。設(shè)計模式允許我們在較高的抽象層次上進行設(shè)計。基于一個模式詞匯表,我們自己以及同事之間就可以討論模式并在編寫文檔時使用它們。模式名可以幫助我們思考,便于我們與其他人交流設(shè)計思想及設(shè)計結(jié)果。找到恰當(dāng)?shù)哪J矫彩俏覀冊O(shè)計模式編目工作的難點之一。第五頁,共三十五頁,編輯于2023年,星期三四個基本要素2.問題(problem)描述了應(yīng)該在何時使用模式。它解釋了設(shè)計問題和問題存在的前因后果,它可能描述了特定的設(shè)計問題,如怎樣用對象表示算法等。也可能描述了導(dǎo)致不靈活設(shè)計的類或?qū)ο蠼Y(jié)構(gòu)。有時候,問題部分會包括使用模式必須滿足的一系列先決條件。第六頁,共三十五頁,編輯于2023年,星期三四個基本要素3.解決方案(solution)描述了設(shè)計的組成成分,它們之間的相互關(guān)系及各自的職責(zé)和協(xié)作方式。因為模式就像一個模板,可應(yīng)用于多種不同場合,所以解決方案并不描述一個特定而具體的設(shè)計或?qū)崿F(xiàn),而是提供設(shè)計問題的抽象描述和怎樣用一個具有一般意義的元素組合(類或?qū)ο蠼M合)來解決這個問題。第七頁,共三十五頁,編輯于2023年,星期三四個基本要素4.效果(consequences)描述了模式應(yīng)用的效果及使用模式應(yīng)權(quán)衡的問題。盡管我們描述設(shè)計決策時,并不總提到模式效果,但它們對于評價設(shè)計選擇和理解使用模式的代價及好處具有重要意義。軟件效果大多關(guān)注對時間和空間的衡量,它們也表述了語言和實現(xiàn)問題。因為復(fù)用是面向?qū)ο笤O(shè)計的要素之一,所以模式效果包括它對系統(tǒng)的靈活性、擴充性或可移植性的影響,顯式地列出這些效果對理解和評價這些模式很有幫助。第八頁,共三十五頁,編輯于2023年,星期三基本設(shè)計模式基本設(shè)計模式分類第九頁,共三十五頁,編輯于2023年,星期三創(chuàng)建型模式3.1.抽象工廠模式(

AbstractFactory)提供一個創(chuàng)建一系列相關(guān)或相互依賴對象的接口,而無需指定它們具體的類。客戶類和工廠類分開。消費者任何時候需要某種產(chǎn)品,只需向工廠請求即可。消費者無須修改就可以接納新產(chǎn)品。缺點是當(dāng)產(chǎn)品修改時,工廠類也要做相應(yīng)的修改。如:如何創(chuàng)建及如何向客戶端提供。例:麥當(dāng)勞和肯德基的雞翅第十頁,共三十五頁,編輯于2023年,星期三創(chuàng)建型模式3.2.工廠方法模式

(FactoryMethod)定義一個用于創(chuàng)建對象的接口,讓子類決定將哪一個類實例化。FactoryMethod使一個類的實例化延遲到其子類。核心工廠類不再負責(zé)所有產(chǎn)品的創(chuàng)建,而是將具體創(chuàng)建的工作交給子類去做,成為一個抽象工廠角色,僅負責(zé)給出具體工廠類必須實現(xiàn)的接口,而不接觸哪一個產(chǎn)品類應(yīng)當(dāng)被實例化這種細節(jié)。例:讓服務(wù)員解釋漢堡的不同口味第十一頁,共三十五頁,編輯于2023年,星期三創(chuàng)建型模式3.3.建造模式

(Builder)將一個復(fù)雜對象的構(gòu)建與它的表示分離,使得同樣的構(gòu)建過程可以創(chuàng)建不同的表示。將產(chǎn)品的內(nèi)部表象和產(chǎn)品的生成過程分割開來,從而使一個建造過程生成具有不同的內(nèi)部表象的產(chǎn)品對象。建造模式使得產(chǎn)品內(nèi)部表象可以獨立的變化,客戶不必知道產(chǎn)品內(nèi)部組成的細節(jié)。建造模式可以強制實行一種分步驟進行的建造過程。例:hello!第十二頁,共三十五頁,編輯于2023年,星期三創(chuàng)建型模式3.4.原型模式

(Prototype)通過給出一個原型對象來指明所要創(chuàng)建的對象的類型,然后用復(fù)制這個原型對象的方法創(chuàng)建出更多同類型的對象。原始模型模式允許動態(tài)的增加或減少產(chǎn)品類,產(chǎn)品類不需要非得有任何事先確定的等級結(jié)構(gòu),原始模型模式適用于任何的等級結(jié)構(gòu)。缺點是每一個類都必須配備一個克隆方法。例:情書第十三頁,共三十五頁,編輯于2023年,星期三創(chuàng)建型模式3.5.單例模式

(Singleton)保證一個類僅有一個實例,并提供一個訪問它的全局訪問點。單例模式只應(yīng)在有真正的“單一實例”的需求時才可使用。例:學(xué)校第十四頁,共三十五頁,編輯于2023年,星期三結(jié)構(gòu)型模式

4.1.適配器模式

(Adapter

)將一個類的接口轉(zhuǎn)換成客戶希望的另外一個接口。Adapter模式使得原本由于接口不兼容而不能一起工作的那些類可以一起工作。適配類可以根據(jù)參數(shù)返還一個合適的實例給客戶端。第十五頁,共三十五頁,編輯于2023年,星期三結(jié)構(gòu)型模式4.2.橋接模式

(Bridge)將抽象部分與它的實現(xiàn)部分分離,使它們都可以獨立地變化。將抽象化與實現(xiàn)化脫耦,使得二者可以獨立的變化,也就是說將他們之間的強關(guān)聯(lián)變成弱關(guān)聯(lián),也就是指在一個軟件系統(tǒng)的抽象化和實現(xiàn)化之間使用組合/聚合關(guān)系而不是繼承關(guān)系,從而使兩者可以獨立的變化。第十六頁,共三十五頁,編輯于2023年,星期三結(jié)構(gòu)型模式4.3.合成模式

(Composite)合成模式就是一個處理對象的樹結(jié)構(gòu)的模式。將對象組合成樹形結(jié)構(gòu)以表示“部分-整體”的層次結(jié)構(gòu)。合成模式使得客戶端把一個個單獨的成分對象和由他們復(fù)合而成的合成對象同等看待,使得客戶對單個對象和復(fù)合對象的使用具有一致性。第十七頁,共三十五頁,編輯于2023年,星期三結(jié)構(gòu)型模式4.5.裝飾模式

(Decorator)動態(tài)地給一個對象添加一些額外的職責(zé)。裝飾模式以對客戶端透明的方式擴展對象的功能,就擴展功能而言,它比繼承后生成子類方式更為靈活。動態(tài)給一個對象增加功能,這些功能可以再動態(tài)的撤消。增加由一些基本功能的排列組合而產(chǎn)生的非常大量的功能。第十八頁,共三十五頁,編輯于2023年,星期三結(jié)構(gòu)型模式4.6.外觀模式

(Facade)外部與一個子系統(tǒng)的通信必須通過一個統(tǒng)一的外觀對象進行。外觀模式提供一個高層次的接口,使得子系統(tǒng)更易于使用。每一個子系統(tǒng)只有一個外觀類,而且此外觀類只有一個實例,也就是說它是一個單例模式。但整個系統(tǒng)可以有多個外觀類。第十九頁,共三十五頁,編輯于2023年,星期三結(jié)構(gòu)型模式4.7.享元模式

(Flyweight)運用共享技術(shù)有效地支持大量細粒度的對象。在拳擊比賽中指最輕量級。享元模式能做到共享的關(guān)鍵是區(qū)分內(nèi)蘊狀態(tài)和外蘊狀態(tài)。內(nèi)蘊狀態(tài)存儲在享元內(nèi)部,不會隨環(huán)境的改變而有所不同。外蘊狀態(tài)是隨環(huán)境的改變而改變的。外蘊狀態(tài)不能影響內(nèi)蘊狀態(tài),它們是相互獨立的。將可以共享的狀態(tài)和不可以共享的狀態(tài)從常規(guī)類中區(qū)分開來,將不可以共享的狀態(tài)從類里剔除出去??蛻舳瞬豢梢灾苯觿?chuàng)建被共享的對象,而應(yīng)當(dāng)使用一個工廠對象負責(zé)創(chuàng)建被共享的對象。享元模式大幅度的降低內(nèi)存中對象的數(shù)量。第二十頁,共三十五頁,編輯于2023年,星期三結(jié)構(gòu)型模式4.8.代理模式(Proxy)

代理模式給某一個對象提供一個代理對象,并由代理對象控制對源對象的引用。代理就是一個人或一個機構(gòu)代表另一個人或者一個機構(gòu)采取行動。某些情況下,客戶不想或者不能夠直接引用一個對象,代理對象可以在客戶和目標(biāo)對象直接起到中介的作用。客戶端分辨不出代理主題對象與真實主題對象。代理模式可以并不知道真正的被代理對象,而僅僅持有一個被代理對象的接口,這時候代理對象不能夠創(chuàng)建被代理對象,被代理對象必須有系統(tǒng)的其他角色代為創(chuàng)建并傳入。第二十一頁,共三十五頁,編輯于2023年,星期三行為模式

5.1.責(zé)任鏈模式

(ChainofResponsibility)為解除請求的發(fā)送者和接收者之間耦合,而使多個對象都有機會處理這個請求。將這些對象連成一條鏈,并沿著這條鏈傳遞該請求,直到有一個對象處理它。在責(zé)任鏈模式中,很多對象由每一個對象對其下家的引用而接起來形成一條鏈。請求在這個鏈上傳遞,直到鏈上的某一個對象決定處理此請求。客戶并不知道鏈上的哪一個對象最終處理這個請求,系統(tǒng)可以在不影響客戶端的情況下動態(tài)的重新組織鏈和分配責(zé)任。處理者有兩個選擇:承擔(dān)責(zé)任或者把責(zé)任推給下家。一個請求可以最終不被任何接收端對象所接受。第二十二頁,共三十五頁,編輯于2023年,星期三行為模式5.2.命令模式

(Command)將一個請求封裝為一個對象,從而使你可用不同的請求對客戶進行參數(shù)化;對請求排隊或記錄請求日志,以及支持可取消的操作。命令模式把發(fā)出命令的責(zé)任和執(zhí)行命令的責(zé)任分割開,委派給不同的對象。命令模式允許請求的一方和發(fā)送的一方獨立開來,使得請求的一方不必知道接收請求的一方的接口,更不必知道請求是怎么被接收,以及操作是否執(zhí)行,何時被執(zhí)行以及是怎么被執(zhí)行的。第二十三頁,共三十五頁,編輯于2023年,星期三行為模式5.3.解釋器模式(Interpreter)給定一個語言,定義它的文法的一種表示,并定義一個解釋器,該解釋器使用該表示來解釋語言中的句子。解釋器模式將描述怎樣在有了一個簡單的文法后,使用模式設(shè)計解釋這些語句。在解釋器模式里面提到的語言是指任何解釋器對象能夠解釋的任何組合。在解釋器模式中需要定義一個代表文法的命令類的等級結(jié)構(gòu),也就是一系列的組合規(guī)則。每一個命令對象都有一個解釋方法,代表對命令對象的解釋。命令對象的等級結(jié)構(gòu)中的對象的任何排列組合都是一個語言。

第二十四頁,共三十五頁,編輯于2023年,星期三行為模式5.4.迭代子模式

(Iterator)提供一種方法順序訪問一個聚合對象中各個元素,而又不需暴露該對象的內(nèi)部表示。多個對象聚在一起形成的總體稱之為聚集,聚集對象是能夠包容一組對象的容器對象。迭代子模式將迭代邏輯封裝到一個獨立的子對象中,從而與聚集本身隔開。迭代子模式簡化了聚集的界面。每一個聚集對象都可以有一個或一個以上的迭代子對象,每一個迭代子的迭代狀態(tài)可以是彼此獨立的。迭代算法可以獨立于聚集角色變化。第二十五頁,共三十五頁,編輯于2023年,星期三行為模式5.5.調(diào)停者模式

(Mediator)用一個中介對象來封裝一系列的對象交互。中介者使各對象不需要顯式地相互引用,從而使其耦合松散,而且可以獨立地改變它們之間的交互。當(dāng)某些對象之間的作用發(fā)生改變時,不會立即影響其他的一些對象之間的作用。保證這些作用可以彼此獨立的變化。調(diào)停者模式將多對多的相互作用轉(zhuǎn)化為一對多的相互作用。調(diào)停者模式將對象的行為和協(xié)作抽象化,把對象在小尺度的行為上與其他對象的相互作用分開處理。第二十六頁,共三十五頁,編輯于2023年,星期三行為模式5.6.備忘錄模式

(Memento)備忘錄對象是一個用來存儲另外一個對象內(nèi)部狀態(tài)的快照的對象。在不破壞封裝性的前提下,捕獲一個對象的內(nèi)部狀態(tài),并在該對象之外保存這個狀態(tài)。這樣以后就可將該對象恢復(fù)到保存的狀態(tài)。第二十七頁,共三十五頁,編輯于2023年,星期三行為模式5.7.觀察者模式(ObServer)觀察者模式定義了一種一隊多的依賴關(guān)系,讓多個觀察者對象同時監(jiān)聽某一個主題對象。這個主題對象在狀態(tài)上發(fā)生變化時,會通知所有觀察者對象,使他們能夠自動更新自己。第二十八頁,共三十五頁,編輯于2023年,星期三行為模式5.8.狀態(tài)模式

(State)狀態(tài)模式允許一個對象在其內(nèi)部狀態(tài)改變的時候改變行為。這個對象看上去象是改變了它的類一樣。狀態(tài)模式把所研究的對象的行為包裝在不同的狀態(tài)對象里,每一個狀態(tài)對象都屬于一個抽象狀態(tài)類的一個子類。狀態(tài)模式的意圖是讓一個對象在其內(nèi)部狀態(tài)改變的時候,其行為也隨之改變。狀態(tài)模式需要對每一個系統(tǒng)可能取得的狀態(tài)創(chuàng)立一個狀態(tài)類的子類。當(dāng)系統(tǒng)的狀態(tài)變化時,系統(tǒng)便改變所選的子類。第二十九頁,共三十五頁,編輯于2023年,星期三行為模式5.9.策略模式

(Strategy)定義一系列的算法,把它們一個個封裝起來,并且使它們可相互替換。策略模式使得算法可以在不影響到客戶端的情況下發(fā)生變化。策略模式把行為和環(huán)境分開。環(huán)境類負責(zé)維持和查詢行為類,各種算法在具體的策略類中提供。由于算法和環(huán)境獨立開來,算法的增減,修改都不會影響到環(huán)境和客戶端。第三十頁,共三十五頁,編輯于2023年,星期三行為模式5.10.模板方法模式

(TemplateMethod)定義一個操作中的算法的骨架,而將一些步驟延遲到子類中。TemplateMethod使得子類可以不改變一個算法的結(jié)構(gòu)即可重定義該算法的某些特定步驟。不同的子類可以以不同的方式實現(xiàn)這些抽象方法,從而對剩余的邏輯有不同的實現(xiàn)。先制定一個頂級邏輯框架,而將邏輯的細節(jié)留給具體的子類去實現(xiàn)。第三十一頁,共三十五頁,編輯于2023年,星期三行為模式5.11.訪問者模式

(Visitor)表示一個作用于某對象結(jié)構(gòu)中的各元素的操作。它使你可以在不改變各元素的類的前提下定義作用于這些元素的新操作。訪問者模式的目的是

溫馨提示

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

評論

0/150

提交評論