23種設計模式PPT合集_第1頁
23種設計模式PPT合集_第2頁
23種設計模式PPT合集_第3頁
23種設計模式PPT合集_第4頁
23種設計模式PPT合集_第5頁
已閱讀5頁,還剩215頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、 1、工廠方法模式、工廠方法模式主講:田旭園程序:奚亮亮ppt :葉良波答問:陳才國1頁頁FACTORY METHOD請MM去麥當勞吃漢堡,不同的MM有不同的口味,要每個都記住是一件煩人的事情,我一般采用Factory Method模式,帶著MM到服務員那兒,說要一個漢堡,具體要什么樣的漢堡呢,讓MM直接跟服務員說就行了。工廠方法模式:核心工廠類不再負責所有產品的創(chuàng)建,而是將具體創(chuàng)建的工作交給子類去做,成為一個抽象工廠角色,僅負責給出具體工廠類必須實現的接口,而不接觸哪一個產品類應當被實例化這種細節(jié)。感謝王良芳大神在校內的分享,新增20種模式的形象比喻。缺:簡單工廠模式、缺省適配模式和不變模式

2、。創(chuàng)建模式:簡單工廠、工廠方法、抽象工廠、單例、建造、模型;結構模式:適配器、缺省適配、合成、裝飾、代理、享元、門面、橋梁;行為模式:不變、策略、模板方法、觀察者、迭代子、責任鏈、命令 備忘錄、狀態(tài)、訪問者、解釋器、調停者。(最后三種不講) 工廠方法模式是類的創(chuàng)建模式,又叫虛擬構造子(Virtual Constructor)模式或者多態(tài)性工廠(Polymorphic Factory)模式。 工廠方法模式的用意是定義一個創(chuàng)建產品對象的工廠接口,將實際工作推遲到子類中。工廠方法解決問題:工廠方法模式是簡單工廠模式的進一步抽象和推廣。由于使用了多態(tài)性,工廠方法模式保持了簡單工廠模式的優(yōu)點,而且克服了

3、它的缺點。工廠方法縮略圖 該模式的優(yōu)點: 這種抽象的結果,使這種工廠方法模式可以用來允許系統(tǒng)不修改具體工廠角色的情況下引進新產品,這一特點無疑使得工廠模式具有超過簡單工廠模式的優(yōu)越性。在工廠方法模式中,一般都有一個平行的等級結構,也就是說工廠和產品是對應的的。抽象工廠對應抽象產品,具體工廠對應具體產品。簡單的示意圖如下:各種角色分類 抽象工廠角色: 具體工廠角色: 抽象產品角色: 具體產品角色:72、簡單工廠模式主講人:陳儒組員:韓政高、戴鵬軍、陳群1頁頁8簡單的介紹簡單工廠模式是創(chuàng)建型模式,用于對象的創(chuàng)建,它不屬于23種gof設計模式。它是工廠模式家族中最簡單實用的模式,可以理解為是不同工廠

4、模式的一個特殊實現。 設計模式描述了軟件設計過程中某一類常見問題的一般性的解決方案,是解決某個方向上的變動需求的問題。而工廠設計模式的存在是為了解決哪一方面的問題呢?或者說它的動機是什么呢?9動機在軟件系統(tǒng)中,經常面臨著“某個對象”的創(chuàng)建工作;由于需求的變化,這個對象經常面臨著劇烈的變化,但是它卻擁有比較穩(wěn)定的接口。如何應對這種變化?如何提供一種“封裝機制”來隔離出“這個易變對象”的變化,從而保持系統(tǒng)中“其他依賴該對象的對象”不隨著需求改變而改變?10優(yōu)缺點 優(yōu)點:簡單工廠模式主要用于隔離類對象的使用者和具體類型之間的耦合關系。面對一個經常變化的具體類型,緊耦合關系會導致軟件的脆弱。通過使用工

5、廠類,外界可以從直接創(chuàng)建具體產品對象的尷尬局面擺脫出來,僅僅需要負責“消費”對象就可以了。而不必管這些對象究竟如何創(chuàng)建及如何組織的明確了各自的職責和權利,有利于整個軟件體系結構的優(yōu)化。 缺點:由于工廠類集中了所有實例的創(chuàng)建邏輯,違反了高內聚責任分配原則,將全部創(chuàng)建邏輯集中到了一個工廠類中;它所能創(chuàng)建的類只能是事先考慮到的,如果需要添加新的類,則就需要改變工廠類了。 3、抽象工廠模式 by: 繆丹權 柳敏乾 李青振 2頁頁FACTORY追MM少不了請吃飯了,麥當勞的雞翅和肯德基的雞翅都是MM愛吃的東西,雖然口味有所不同,但不管你帶MM去麥當勞或肯德基,只管向服務員說來四個雞翅就行了。麥當勞和肯德

6、基就是生產雞翅的Factory工廠模式:客戶類和工廠類分開。消費者任何時候需要某種產品,只需向工廠請求即可。消費者無須修改就可以接納新產品。缺點是當產品修改時,工廠類也要做相應的修改。如:如何創(chuàng)建及如何向客戶端提供。抽象工廠模式定義對象創(chuàng)建型模式,又稱Kit模式。 在中對Abstract Factory的意圖是這樣描述的:為了創(chuàng)建一組相關或相互依賴的對象提供一個接口,而且無需指定它們的具體類。有時候,幾個對象需要一種協(xié)調的方式實例化。例如,在處理用戶界面時,系統(tǒng)可能在一個操作系統(tǒng)上用一組對象,在另一個系統(tǒng)上用另一組對象。Abstract Factory 確保系統(tǒng)根據情況獲得正確的對象。產品族

7、產品族,是指位于不同產品等級結構中,功 能相關聯(lián)的產品組成的家族。比如下圖中,箭頭所指就是三個功能相關聯(lián)的產品。它們位于三個不同的等級結構中的相同位置上,組成了一個產品族。為什么需要AF 為什么需要AF 如果,現在有三個相似的工廠等級結構,那么采用工廠方法模式就勢必要使用三個獨立的工廠等級結構。由于三個等級結構相似性,會導致三個平行的等級結構。隨著產品等級結構的數目增加,工廠方法模式所給出的工廠等級結構的數目也會增加。抽象工廠模式結構圖結構與角色抽象工廠 (AbstractFactory)角色: 擔任這個角色的是工廠方法模式的核心,它是與應用系統(tǒng)的商業(yè)邏輯無關的。通常使用JAVA接口或者抽象J

8、AVA類來實現,而所有的具體工廠類必須實現該接口或者繼承抽象類。具體工廠類 (Conrete Factory)角色: 這個角色直接在客戶端的調用下創(chuàng)建產品的實例。這個角色含有選擇合適的產品對象的邏輯。通常使用具體類來實現這個角色。抽象產品(Abstract Product)角色: 擔任這個角色的類是工廠方法模式所創(chuàng)建的對象的父類,或它們共同擁有的接口。通常使用接口或者抽象類來實現這一角色。具體產品(Concrete Product)角色: 抽象工廠模式所創(chuàng)建的任何產品對象都是某一個具體產品類的實例。通常使用具體JAVA類來實現。抽象工廠模式時序圖 在客戶新建一個抽象工廠的時候,其實是新建了一個

9、具體的工廠,然后再通過該具體工廠來創(chuàng)建各種具體的產品。抽象工廠模式優(yōu)缺點優(yōu)點:s 程序設計中有三種耦合:零耦合、抽象耦合、具體耦合。抽象工廠設計可以很好的把具體耦合轉換到抽象耦合來減少耦合程度。s 具體產品從客戶代碼中被分離出來。s 容易改變產品的系列。s 將一個系列的產品族統(tǒng)一到一起創(chuàng)建。抽象工廠模式優(yōu)缺點缺點:u由于每個類的產生都要繼承抽象類(或接口),并由工廠來創(chuàng)建,這樣就增加了代碼長度和工作量。u在產品族中擴展新的產品是很困難的,它需要修改抽象工廠的接口。u使軟件結構更復雜。與其他模式的區(qū)別和聯(lián)系與工廠模式的區(qū)別:工廠方法模式是一種極端情況的抽象工廠模式,而抽象工廠模式可以看成是工廠方

10、法模式的推廣。工廠方法模式用來創(chuàng)建一個產品的等級結構的,而抽象工廠模式是用來創(chuàng)建多個產品的等級結構的。工廠方法模式只有一個抽象產品類,而抽象工廠模式有多個抽象產品類。 總結 工廠的實現通常使用Singleton模式。一個應用中一般每個系列產品只需要使用一個具體工廠的實例。 抽象工廠模式提供了一個創(chuàng)建一系列相關或相互依賴的對象的接口,關鍵點在于應對”多系列對象創(chuàng)建”的需求變化。 學會抽象工廠模式,可以更好地理解面向對象中的原則: 面向接口編程,而不要面向實現編程。組員:湯仲喆組員:湯仲喆 王凱王凱 李義冬李義冬主講:湯仲喆主講:湯仲喆代碼:王凱代碼:王凱答辯:李義冬答辯:李義冬4、The Sin

11、gleton Pattern (單例模式)(單例模式)1頁頁SINGLETON俺有6個漂亮的老婆,她們的老公都是我,我就是我們家里的老公Sigleton,她們只要說道老公,都是指的同一個人,那就是我(剛才做了個夢啦,哪有這么好的事)單例模式:單例模式確保某一個類只有一個實例,而且自行實例化并向整個系統(tǒng)提供這個實例單例模式。單例模式只應在有真正的單一實例的需求時才可使用。 什么是單例模式顧名思義,單例模式的意思就是只有一個實例。單例模式確保某一個類只有一個實例,而且自行實例化并向整個系統(tǒng)提供這個實例。這個類稱為單例類。 單例模式的要點(1)某個類只能有一個實例;(2)它必須自行創(chuàng)建這個實例;(3

12、)它必須自行向整個系統(tǒng)提供這個實例。解決方案-單例模式意圖:希望類只有一個實例,但沒有控制類實例化的全局變量(對象)。同時希望確保所有客體對象使用該類的相同實例,而無需將引用傳給它們。問題:幾個不同的客戶對象需要引用同一個對象,而且希望確保這種類型的對象數目不超過一個。解決方案:保證一個實例參與者與協(xié)作者:客戶對象只能通過getInstance()方法創(chuàng)建單例類的實例。效果:客戶對象無需操心是否存在單例類的實例,實例化有單例類自己控制。實現:一個引用單例對象的靜態(tài)私有成員變量一個公共靜態(tài)方法,負責實現一次性的實例化并返回對單例對象的引用設置為保護或私有的構造方法單例模式的關鍵特征單例模式設計會

13、產生什么問題? 在多線程程序中,Singleton模式可能會出現一個問題。假設對getInstance()方法的兩個調用幾乎同時發(fā)生,這種情況可能非常糟糕。此時會發(fā)生什么?1.第一個線程檢查實例是否存在。因為實例不存在,該線程執(zhí)行創(chuàng)建第一個實例的代碼部分。2.然而,假設在實例化完成之前,另一個線程也來檢查實例成員變量是否為null。因為第一個線程還什么都沒有創(chuàng)建,實例成員變量仍然等于null,所以第二個線程也執(zhí)行了創(chuàng)建一個對象的代碼。3.現在,兩個線程都執(zhí)行了Singleton對象的new操作,因此創(chuàng)建了兩個重復的對象。懶漢式 VS 餓漢式所以,到底使用哪一種方式,要看實際的需求。n餓漢式:靜

14、態(tài)初始化方式,在啟動加載單例類時就實例化對象,只實例化一次,以后用到的時候就不需要再去實例化了,加載類的時候速度比較慢,但以后獲得對象時的速度比較快,該對象從加載到應用結束一直占用資源。n懶漢式:相當于一個延遲加載機制,即你需要這個對象時候才去實例化,加載類的時候速度比較快,但以后獲得對象時的速度比較慢,該對象在整個應用的生命周期只有一部分時間占用資源。面臨多線程訪問的安全性問題,需要做雙重鎖定處理才可以保證安全。單例模式的應用 一個隨機數產生的例子 在整個應用程序中只需要一個類的實例來產生隨機數,客戶端程序從類中獲取這個實例,調用這個實例的方法nextInt(),公用的方法訪問需要進行同步,

15、這是單例模式需要解決的同步問題。參與者:Singleton定義一個Instance操作,允許客戶訪問它的唯一實例,Instance是一個類操作,負責創(chuàng)建自己的唯一實例。協(xié)作關系:客戶只能通過Singleton的Instance操作訪問一個Singleton的實例。主講:范允易小組成員:陳巧燕、劉秀穎、郭娟5、建造者模式(Builder Pattern) -創(chuàng)建型模式1頁頁BUILDERMM最愛聽的就是我愛你這句話了,見到不同地方的MM,要能夠用她們的方言跟她說這句話哦,我有一個多種語言翻譯機,上面每種語言都有一個按鍵,見到MM我只要按對應的鍵,它就能夠用相應的語言說出我愛你這句話了,國外的MM

16、也可以輕松搞掂,這就是我的我愛你builder。(這一定比美軍在伊拉克用的翻譯機好賣)建造模式:將產品的內部表象和產品的生成過程分割開來,從而使一個建造過程生成具有不同的內部表象的產品對象。建造模式使得產品內部表象可以獨立的變化,客戶不必知道產品內部組成的細節(jié)。建造模式可以強制實行一種分步驟進行的建造過程。概述概述Builder模式是一種創(chuàng)建型模式,它主要是應對項目中一些復雜對象的創(chuàng)建工作。所謂“復雜對象”是指:此對象中還含有其它的子對象。意圖:將一個復雜的構建與其表示相分離,使得同樣的構建過程可以創(chuàng)建不同的表示。-設計模式GOF Builder模式結構l 建造者(Builder)角色l 具體

17、建造者(Concrete Builder)角色l 產品(Product)角色l 指導者(Director)角色時序圖時序圖優(yōu)缺點和適用性優(yōu)缺點和適用性1.解耦了組裝過程和創(chuàng)建具體部件2.職責分離3.精細的控制創(chuàng)建過程4.難于應付“分步驟構建算法”的需求變動適用性:1.復雜的內部結構2.相互依賴的各部分3.創(chuàng)建過程獨立4.各部分變化劇烈,組合算法相對穩(wěn)定相關模式相關模式抽象工廠(Abstract Factory)模式共性:創(chuàng)建型模式、創(chuàng)建類對象區(qū)別:Abstract Factory模式:解決“系列對象”的需求變化Builder模式:解決“對象部分”的需求變化總結總結Builder模式的實質是:解

18、決一個復雜對象的創(chuàng)建工作。明確變化的部分和相對穩(wěn)定的部分,隔離變化,解耦穩(wěn)定的組裝過程和變化的具體部件,使得我們不用去關心每個部件是如何組裝的;如何將具體部件和組裝算法隔離是要解決的問題。什么是原始模型模式?什么是原始模型模式?屬于對象的創(chuàng)建模式。通過給出一個原型對象來指明所要創(chuàng)建的對象的類型,然后用復制這個原型對象的辦法創(chuàng)建出更多同類型的對象。 結構:結構:第一種是簡單形式第一種是簡單形式第二種是登記形式第二種是登記形式6、原始模型模式小組分工:做報告:鄭遲回答問題:徐冰,俞棟輝代碼:王煒2頁頁PROTOTYPE跟MM用QQ聊天,一定要說些深情的話語了,我搜集了好多肉麻的情話,需要時只要co

19、py出來放到QQ里面就行了,這就是我的情話prototype了。(100塊錢一份,你要不要)原始模型模式:通過給出一個原型對象來指明所要創(chuàng)建的對象的類型,然后用復制這個原型對象的方法創(chuàng)建出更多同類型的對象。原始模型模式允許動態(tài)的增加或減少產品類,產品類不需要非得有任何事先確定的等級結構,原始模型模式適用于任何的等級結構。缺點是每一個類都必須配備一個克隆方法。簡單形式 這種形式涉及到三個角色:這種形式涉及到三個角色:客戶(Client)角色:客戶類提出創(chuàng)建對象的請求。抽象原始(Prototype)角色:這是一個抽象角色,通常由一個java接口或java抽象類實現。此角色給出所有的具體原始類所需要

20、的接口。具體原型(Concrete Prototype)角色:被復制的對象。此角色需要實現抽象的原型角色所要求的接口。 簡單形式 UML圖登記形式這種形式涉及到三個角色:這種形式涉及到三個角色:客戶端(Client)角色:客戶端類向管理員提出創(chuàng)建對象的請求。 抽象原型(Prototype)角色:這是一個抽象角色,通常由一個接口或抽象類實現。 此角色給出所有的具體原型類所需要的接口。 具體原型(Concrete Prototype)角色:被復制的對象。需要實現抽象原型角色所要求的接口。 原型管理器(Prototype Manager)角色:創(chuàng)建具體原型類的對象,并記錄每一個被創(chuàng)建的對象。 登記形

21、式 UML圖兩種形式的比較 簡單形式和登記形式的原始模型模式各有其長處和短處。 1)如果需要創(chuàng)建的原型對象數目較少而且比較固定的話,可以采取第一種形式,也即簡單形式的原始模型模式。在這種情況下,原型對象的引用可以由客戶端自己保存。 2)如果要創(chuàng)建的原型對象數目不固定的話,可以采取第二種形式,也即登記形式的原始模型模式。在這種情況下,客戶端并不保存對原型對象的引用,這個任務被交給管理員對象。在復制一個原型對象之前,客戶端可以查看管理員對象是否已經有一個滿足要求的原型對象。如果有,可以直接從管理員類取得這個對象引用;如果沒有,客戶端就需要自行復制此原型對象。 模式的實現1):淺復制(淺克?。?被復

22、制對象的所有變量都含有與原來的對象相同的值,而所有的對其他對象的引用都仍然指向原來的對象,換言之,淺復制僅僅復制所考慮的對象,而不復制它所引用的對象。 2):深復制(深克隆) 被復制對象的所有的變量都含有與原來的對象相同的值,除去那些引用其他對象的變量。那些引用其他對象的變量將指向被復制過的新對象,而不再是原有的那些被引用的對象。換言之,深復制把要復制的對象所引用的對象都復制了一遍,而這種對被引用到的對象的復制叫做間接復制。 模式的實現 利用串行化來作深復制 把對象寫到流里的過程是串行化(Serilization)過程,非常形象的稱為“冷凍”或是“腌咸菜”過程。而把對象從流中讀出來的并行化(D

23、eserialization)過程叫做“解凍”或是“回鮮”過程。寫到流里的是對象的一個拷貝,而原來對象仍然存在于JVM里面,因此“腌成咸菜”(串行化)的只是對象的一個拷貝。java咸菜(并行化)還可以回鮮。 模式的實現 串行化的結構圖淺復制 UML圖深復制 UML圖原始模型模式的優(yōu)缺點特有的優(yōu)點 (1):原始模型模式原許動態(tài)地增加或減少產品類。由于創(chuàng)建產品類實例的方法是產品類內部具有的,因此,增加新產品對整個結構沒有影響。 (2):原始模型模式提供簡化的創(chuàng)建結構。工廠方法模式常常需要有一個與產品類等級結構相同的等級結構,而原始模型模式就不需要這樣。 (3):具有給一個應用軟件動態(tài)加載新功能的能

24、力。例如,一個分析Web服務器的記錄文件的應用軟件,針對每一種記錄文件格式,都可以由一個相應的“格式類”負責。如果出現了應用軟件所不支持的新的Web服務器,只需要提供一個格式類的克隆,并在客戶端登記即可,而不必給每個軟件的用戶提供一個全新的軟件包。 (4):產品類不需要非得有任何事先確定的等級結構,因為原始模型模式適合用于任何的等級結構。主要缺點:每一個類都必須配備一個克隆方法,配備克隆方法需要對類的功能進行通盤考慮,這對于全新的類來說不是很難,而對于已經有的類不一定很容易,特別是當一個類引用不支持串行化的間接對象,或者引用含有循環(huán)結構的時候。 7、The Adaptor Pattern(適配

25、器模式)主講:顧祝燕組員:耿惠、何振芬、朱金鳳2頁頁ADAPTER在朋友聚會上碰到了一個美女Sarah,從香港來的,可我不會說粵語,她不會說普通話,只好求助于我的朋友kent了,他作為我和Sarah之間的Adapter,讓我和Sarah可以相互交談了(也不知道他會不會耍我)適配器(變壓器)模式:把一個類的接口變換成客戶端所期待的另一種接口,從而使原本因接口原因不匹配而無法一起工作的兩個類能夠一起工作。適配類可以根據參數返還一個合適的實例給客戶端。面向對象軟件系統(tǒng)的適配問題 假設我們已經有一個軟件系統(tǒng),原來使用了一個第三方類庫A?,F在有一個新的第三方類庫B,其功能等各方面都更加強大。我們希望用B

26、來替換A,以改善我們的系統(tǒng)。但是B的接口與A不一樣。那怎么辦呢?Adapter模式 定義 將一個類的接口轉換成客戶端所期望的另一種接口,從而使原本因接口不匹配而無法在一起工作的兩個類能夠在一起工作。 別名 包裝器WrapperAdapter模式動機 有時,為復用而設計的工具箱類不能夠被復用的原因僅僅是因為它的接口與專業(yè)應用領域所需要的接口不匹配(名稱不一樣,參數不一樣,等等)。我們可以改變工具箱類使它兼容專業(yè)領域中的類的接口,但前提是必須有這個工具箱的源代碼。然而即使我們得到了這些源代碼,修改工具箱也是沒有什么意義的;因為不應該僅僅為了實現一個應用,工具箱就不得不采用一些與特定領域相關的接口。

27、動機(續(xù)) 我們可以不用上面的方法,而定義一個適配器類,由它來適配工具箱的接口和專業(yè)應用的接口。我們可以用兩種方法做這件事: 1) 繼承專業(yè)應用類的接口和工具箱類的實現。這種方法對應A d a p t e r模式的類版本(多繼承) 2) 將工具箱類的實例作為適配器類的組成部分,并且使用工具箱的接口實現適配器類。這種方法對應A d a p t e r模式的對象版本。Adapter模式 適用性 以下情況使用A d a p t e r模式 你想使用一個已經存在的類,而它的接口不符合你的需求。 你想創(chuàng)建一個可以復用的類,該類可以與其他不相關的類或不可預見的類(即那些接口可能不一定兼容的類)協(xié)同工作。A

28、dapter模式 結構(類版本)Adapter模式 結構(對象版本)基于類的Adapter模式 基于類的Adapter模式的一般結構如下:Adaptee類為Adapter的父類,Adaptee類為適配源,適配目標(接口)也是Adapter的父類;基于類的Adapter模式比較適合應用于Adapter想修改Adaptee的部分方法的情況。 基于對象的Adapter模式 基于對象的Adapter模式的一般結構如下:Adaptee類對象為Adapter所依賴,適配目標(接口)是Adapter的父類; 基于對象的Adapter模式比較適合應用于Adapter想為Adaptee添加新的方法的情況。但在A

29、daptee類的方法與Adapter類的方法不同名而實現相同功能的情況下,我們一般也使用基于對象的Adapter模式, Adapter模式 參與者 Ta r g e t C l i e n t使用的與特定領域相關的“接口”。 C l i e n t 與符合Ta rg e t接口的對象協(xié)同的專業(yè)系統(tǒng)。 A d a p t e e 一個已經存在的“接口”,它具有Client要求的功能但不符合Client的接口要求。這個接口需要適配。 A d a p t e r 對A d a p t e e的接口與Ta rg e t接口進行適配Adapter模式協(xié)作 Client在A d a p t e r實例上調

30、用一些操作(請求)。接著適配器調用A d a p t e e的操作實現這個請求。效果(類適配器和對象適配器有不同的權衡) 類適配器 用一個具體的A d a p t e r類對A d a p t e e和Ta rg e t進行匹配。結果是當我們想要匹配一個類以及所有它的子類時,類A d a p t e r將不能勝任工作。 使得A d a p t e r可以重定義A d a p t e e的部分行為,因為A d a p t e r是A d a p t e e的一個子類。 僅僅引入了一個對象,并不需要額外的指針以間接得到a d a p t e e。Adapter模式 效果(類適配器和對象適配器有不同

31、的權衡) 對象適配器則 允許一個A d a p t e r與多個A d a p t e e即A d a p t e e本身以及它的所有子類(如果有子類的話)同時工作。A d a p t e r也可以一次給所有的A d a p t e e添加功能。 使得重定義A d a p t e e的行為比較困難。這就需要生成A d a p t e e的子類并且使得A d a p t e r引用這個子類而不是引用A d a p t e e本身。8、缺省適配模式(Default Adapter) -楊鵬、余暉、許超杰1頁頁問題的提出:魯智深的故事這個抽象的天星類便是一個適配器類,魯智深實際借助于適配器類模式達到

32、了剃度的目的。此適配器類實現了和尚接口所要求的所有方法。但是與通常的適配器模式不同的是,此適配器類給出所有的方法的實現都是“平庸”的。這種“平庸化”的適配器模式稱作缺省適配模式缺省適配模式缺省適配模式(Default Adapter) 一、概述 缺省適配模式為一個接口提供缺省實現,這樣子類型可以從這個缺省實現進行擴展,而不必從原有接口進行擴展。當不需要全部實現適配器接口提供的方法時,可先設計一個抽象類實現適配器接口,并為接口中每個方法提供一個默認實現(空方法)。那么該抽象類的子類可有選擇地覆蓋父類的某些方法來實現需求。二、結構二、結構缺省適配模式(Default Adapter)Public

33、interface AbstractService void serviceOperation1(); int serviceOperation2(); String serviceOperation3();Public class ServiceAdapter implements AbstractService public void serviceOperation1() public int serviceOperation2()return 0; public String serviceOperation3()return null; 缺省適配模式小結 在任何時候,如果不準備實現一

34、個接口的所有方法時,就可以模仿WindowApdapter的做法制造一個抽象類,給出所有方法的平庸的實現。這樣從這個抽象類繼承下去的子類就不必實現所有的方法了。 適配器模式把一個類的接口換成客戶端所期待的另一個接口。缺省適配模式-適配器模式的“平庸化”形式可以使所考察的類不必實現不需要的那部分接口。9、composite(合成合成)模式模式講解人:陳敖其他成員:黃文,林麗麗,林溫柔2頁頁COMPOSITEMary今天過生日。我過生日,你要送我一件禮物。嗯,好吧,去商店,你自己挑。這件T恤挺漂亮,買,這條裙子好看,買,這個包也不錯,買。喂,買了三件了呀,我只答應送一件禮物的哦。什么呀,T恤加裙子

35、加包包,正好配成一套呀,小姐,麻煩你包起來。.,MM都會用Composite模式了,你會了沒有?合成模式:合成模式將對象組織到樹結構中,可以用來描述整體與部分的關系。合成模式就是一個處理對象的樹結構的模式。合成模式把部分與整體的關系用樹結構表示出來。合成模式使得客戶端把一個個單獨的成分對象和由他們復合而成的合成對象同等看待。Composite模式 別名:部分-整體模式;組合模式;合成模式 要點:如何設計單個對象和組合對象,使他們具有一致的操作接口。 Composite模式把部分和整體關系用樹結構表示,是屬于對象的結構模式。 Composite模式要對Composite的對象進行管理,所以在一定

36、位置給予對象的相關管理方法,如:add(),remove()等. Composite模式中對象的管理有兩種方案。 安全方式:此方式只允許樹枝構件有對象的管理方法。 透明方式:此方式只允許樹枝和樹葉都有對象的管理方法,但樹葉對象中的管理方法無實際意義。組成部分: component構件:抽象組合對象的公共行為接口 leaf構件:樹葉對象,沒有下級子對象 composite構件:樹枝對象,樹枝對象可以包含一個或多個其他樹枝或樹葉對象UML示意圖:安全方式:透明方式:安全式特點:錯誤地調用會導致編譯時出錯透明式特點:編譯時不會出錯,錯誤地調用會導致拋出異常 優(yōu)點: 可以清楚地定義分層次的復雜對象,表

37、示對象的全部或部分層次,使得增加新構件也更容易。 客戶端調用簡單,客戶端可以一致的使用組合結構或其中單個對象。 定義了包含葉子對象和容器對象的類層次結構,葉子對象可以被組合成更復雜的容器對象,而這個容器對象又可以被組合,這樣不斷遞歸下去,可以形成復雜的樹形結構。 很容易在組合體內加入對象構件,客戶端不必因為加入了新的對象構件而更改原有代碼。 缺點: 設計變得更加抽象,對象的業(yè)務規(guī)則如果很復雜,則實現組合模式具有很大挑戰(zhàn)性,而且不是所有的方法都與葉子對象子類都有關聯(lián)。 增加新構件時可能會產生一些問題,很難對容器中的構件類型進行限制。適用環(huán)境: 需要表示一個對象整體或部分層次,在具有整體和部分的層

38、次結構中,希望通過一種方式忽略整體與部分的差異,可以一致地對待它們。 讓客戶能夠忽略不同對象層次的變化,客戶端可以針對抽象構件編程,無需關心對象層次結構的細節(jié)。 對象的結構是動態(tài)的并且復雜程度不一樣,但客戶需要一致地處理它們。10、裝飾模式、裝飾模式Presented by 馬慶 沈月云 彭怡然 姚敏2頁頁DECORATORMary過完輪到Sarly過生日,還是不要叫她自己挑了,不然這個月伙食費肯定玩完,拿出我去年在華山頂上照的照片,在背面寫上最好的的禮物,就是愛你的Fita,再到街上禮品店買了個像框(賣禮品的MM也很漂亮哦),再找隔壁搞美術設計的Mike設計了一個漂亮的盒子裝起來.,我們都是

39、Decorator,最終都在修飾我這個人呀,怎么樣,看懂了嗎?裝飾模式:裝飾模式以對客戶端透明的方式擴展對象的功能,是繼承關系的一個替代方案,提供比繼承更多的靈活性。動態(tài)給一個對象增加功能,這些功能可以再動態(tài)的撤消。增加由一些基本功能的排列組合而產生的非常大量的功能。Company Logo1.裝飾模式介紹意圖意圖 動態(tài)地給一個對動態(tài)地給一個對象添加一些額外象添加一些額外的職責。就增加的職責。就增加功能來說,功能來說,Decorator模式比模式比生成子類更為靈生成子類更為靈活活Decorator模式模式工作原理工作原理 可以創(chuàng)建始于可以創(chuàng)建始于Decorator對象(負對象(負責新功能的對象

40、)責新功能的對象)終于原對象的一個終于原對象的一個對象對象“鏈鏈”Company Logo1.裝飾模式介紹 裝飾模式的定義裝飾模式可以動態(tài)的給一個對象附加一些功能。使用裝飾模式擴展功能不會產生類爆炸。它采用的是合成方式,比繼承方式更加靈活。 裝飾模式要解決的問題提供一種修改類的行為,而避免創(chuàng)建眾多的派生類的途徑。 Company Logo3.討論v面向對象設計的開面向對象設計的開-閉原則閉原則v類應該對擴展開放,對修改封閉。類應該對擴展開放,對修改封閉。 目的是在不需修改已有代碼的情況下方便的擴展類的功能。按照這一原則設計的系統(tǒng)具有以下優(yōu)點: 具有一定的適應性和靈活性。 具有一定的穩(wěn)定性和延續(xù)

41、性。v“對擴展開放,對修改封閉。對擴展開放,對修改封閉?!边@聽起來自這聽起來自相矛盾??!有哪些方法可以不修改已有代碼相矛盾啊!有哪些方法可以不修改已有代碼但又能擴展其功能?但又能擴展其功能?v何時使用開閉原則?何時使用開閉原則?Company Logo3.討論v何謂裝飾?如何裝飾?何謂裝飾?如何裝飾? 所謂裝飾就是將一個對象包裝起來。所謂裝飾就是將一個對象包裝起來。在程序上也就是讓一個對象在程序上也就是讓一個對象a包含另一個對包含另一個對象象b。a對應的類對應的類A是是“裝飾類裝飾類”,b對應的類對應的類B是是被裝飾類。被裝飾類。如果要讓裝飾可以重復,且不必考慮次序,如果要讓裝飾可以重復,且不

42、必考慮次序,那么裝飾的要點是裝飾者和被裝飾者具有那么裝飾的要點是裝飾者和被裝飾者具有相相同的類型同的類型(有共同的父類)。(有共同的父類)。Company Logo3.討論首先生成一個首先生成一個DarkRoast對象對象DarkRoastCost()DarkRoast繼承了Beverage,擁有一個計算飲料價格的方法cost()。Company Logo3.討論MochaCost()然后然后DarkRoastCost()Mocha對象是裝飾者,他與被它裝飾的對象DarkRoast具有相同的類型(是Beverage的子類),也有一個cost()方法。顧客想要mocha,所以我們創(chuàng)建一個Moch

43、a對象,并用它包裝DarkRoast.Company Logo3.討論再然后再然后MochaCost()DarkRoastCost()whip對象是裝飾者,他與被它裝飾的對象DarkRoast具有相同的類型,也有一個cost()方法。顧客還想要whip,所以我們創(chuàng)建一個Whip對象,并用它包裝Mocha.WhipCost()Company Logo3.討論計算飲料的價格計算飲料的價格MochaCost()DarkRoastCost()調用最外層的裝飾者whip的cost(),whip再將計算任務委派給被它包裝的對象,得到一個價格后,再加上whip自己的價格.WhipCost()5.005.00

44、+0.505.50+1.006.50Company LogoDiagram所謂委派就是一個對象將工作(或工作的所謂委派就是一個對象將工作(或工作的一步分)交給另一個對象來完成。一步分)交給另一個對象來完成。在裝飾模式中,委派是指在裝飾模式中,委派是指裝飾對象裝飾對象將任務將任務交給交給被裝飾對象被裝飾對象來完成。來完成。委派可以傳遞,最終必須要有一個委派可以傳遞,最終必須要有一個干實事干實事的對象的對象。v何謂委派?何謂委派?Company Logo3.討論裝飾者在委派它裝飾的裝飾者在委派它裝飾的對象作某種處理時,可對象作某種處理時,可以添加上自己的行為以添加上自己的行為(功能擴展)(在委派(

45、功能擴展)(在委派之前或之前或/和之后)。和之后)。裝飾者與被裝飾者裝飾者與被裝飾者具有相同的類型具有相同的類型對象可以在任何時候被對象可以在任何時候被裝飾,因此我們能在運裝飾,因此我們能在運行時動態(tài)的裝飾對象。行時動態(tài)的裝飾對象??梢杂枚鄠€裝飾可以用多個裝飾者裝飾一個對象者裝飾一個對象由于裝飾者與被裝飾者由于裝飾者與被裝飾者具有相同的類型,我們具有相同的類型,我們可以用裝飾后的對象代可以用裝飾后的對象代替原來的對象。替原來的對象。要點要點Company Logo HouseBlendCost()BeveragedescriptiongetDescription()Cost()/Other m

46、ethodsDarkRoastCost()DecafCost()EspressoCost()CondimentDecoratorgetDescription()MochaBeverage beveragegetDescription()Cost()WhipBeverage beveragegetDescription()Cost()具體的咖啡品種調味品裝飾者,不僅實現cost(),還要實現getDescription()考慮一下本講開頭的引例是如何實現的。咖啡店的類圖咖啡店的類圖Proxy pattern 11、 代理模式小組成員:王建奇,王洪軍,嵇海鋒,吳水生2頁頁PROXY跟MM在網上聊天

47、,一開頭總是hi,你好,你從哪兒來呀?你多大了?身高多少呀?這些話,真煩人,寫個程序做為我的Proxy吧,凡是接收到這些話都設置好了自動的回答,接收到其他的話時再通知我回答,怎么樣,酷吧。代理模式:代理模式給某一個對象提供一個代理對象,并由代理對象控制對源對象的引用。代理就是一個人或一個機構代表另一個人或者一個機構采取行動。某些情況下,客戶不想或者不能夠直接引用一個對象,代理對象可以在客戶和目標對象直接起到中介的作用。客戶端分辨不出代理主題對象與真實主題對象。代理模式可以并不知道真正的被代理對象,而僅僅持有一個被代理對象的接口,這時候代理對象不能夠創(chuàng)建被代理對象,被代理對象必須有系統(tǒng)的其他角色

48、代為創(chuàng)建并傳入。代理模式的定義定義 代理模式(Proxy Pattern), 為其他對象提供一種代理以控制對這個對象的訪問。在某些情況下 ,一個客戶不 想或者不能直接引用另一個對象,而代理對象可以在客戶端和目標對象之間起到中介的作用。 代理,指的就是一個角色代表另一個角色采取行動,就象在實驗室,用代理上網,我們設置一個代理地址把任何http請求轉發(fā)到代理軟件ccporxy或者squid,代理軟件再去請求實際的web服務器,而它把獲得的結果返回給用戶,結束一次訪問。代理模式的基本UML類圖Subject obj = new Proxy ()代理模式的基本時序圖 代理模式一般涉及到的角色 抽象主題

49、(Subject) 它是一個對象和它的代理所公用的接口,即realsubject 和proxy實例所實現的接口,這樣就在任何使用realsubject的地方都可以使用Proxy。 實際主題(RealSubject) 實現抽象主題接口的類。 代理(Proxy) 實現抽象主題接口的類,代理含有主題接口聲明的變量,用來存放realsubject角色的實例引用,這樣就可以控制對它所代理對象的訪問。代理模式的應用 一般來說分為幾種:遠程(Remote)代理:也就是為一個對象在不同的地址空間提供局部代表。這樣可以隱藏一個對象存在于不同地址空間的事實。虛擬(Virtual)代理:根據需要將一個資源消耗很大或

50、者比較復雜的對象延遲的真正需要時才創(chuàng)建。 比如說你打開一個很大的HTML網頁時,里面可能有很多的文字和圖片,但你還是可以很快的打開它,此時你所看到的是所有的文字,但圖片卻是一張張的下載后才能看到。那些未打開的圖片框,就是通過虛擬代理來代替了真實的圖片,此時代理存儲了真實圖片的路徑和尺寸。保護(Protect or Access)代理:控制對一個對象的訪問權限。一般用于對象有 不同權限的時候。智能引用(Smart Reference)代理:當調用真實對象時,代理出來另外一些事,提供比對目標對象額外的服務。 如:計算真實對象的引用次數,這樣當該對象沒有引用時,可以自動釋放它;或當第一次引用一個持久

51、對象時,將它裝入內存;或在訪問一個實際對象前,檢查是否已經鎖定它,以確保其它對象不能改變它。它們都是通過代理在訪問一個對象時附加一些內務處理。 動機1.為了在我們確實需要這個對象是才對它進行創(chuàng)建和初始化。2.用戶希望程序和某個對象打交道,程序不希望用戶直接訪問該對象為什么要使用為什么要使用Proxy模式?模式?代理模式的作用 Proxy模式在訪問對象時引入了一定程度的間接性。根據代理的類型,附加的間接性有多種用途: (1)遠程代理可以隱藏一個對象存在于不同地址空間的事實。 (2)虛代理可以進行最優(yōu)化,例如根據要求創(chuàng)建對象。 (3)保護代理和智能指針都允許訪問一個對象時有一些附加的內務處理。遠程

52、代理( Remote Proxy ) 為一個對象在不同的地址空間提供局部代表。這樣可以隱藏一個對象存在于不同地址空間的事實。 RMI(remote method invocation)是一種分布式技術,使用RMI可以讓一個虛擬機上的應用程序請求調用位于網絡上另一個JVM上的對象方法。RMI不希望客戶應用程序直接與遠程對象打交道,代替地讓應用程序和遠程對象的代理打交道。RMI會生成一個存根:一種特殊的字節(jié)碼,并讓這個存根產生的對象作為遠程對象的代理,即遠程代理。虛代理 代理通常擁有與實際對象基本相同的接口。代理的工作方式是:把服務請求明智地轉發(fā)給代理控制的底層對象,最終完成任務。 對于大數據量的

53、加載,VirtualProxy模式可以讓加載在后臺進行,前臺用的Prxoy對象使得整體運行速度加快。虛代理例子 在文檔中嵌入圖形對象的文檔編輯器,有些圖形對象的創(chuàng)建開銷很大。但是打開文檔必須很迅速,因此我們在打開文檔時避免一次性創(chuàng)建所有開銷很大的對象。意味著應該根據需要進行創(chuàng)建,我們使用一個圖像代理,替代那個真的圖像,能夠實現這個需求。保護代理 控制對一個對象的訪問權限。一般用于不同客戶對對象擁有 不同訪問權限的時候。 結構上,保護代理和遠程代理以及虛代理是極為相似的,只是在請求訪問真實對象時提供的功能不同。 區(qū)別:遠程代理向客戶隱藏了遠端機器或進程上的對象,虛代理負責管理了真實對象的加載方式

54、。而保護代理則為用戶訪問對象的權限進行管理12、享元模式王萌(講課)黃萬德(PPT、代碼)王勛(回答問題)1頁頁FLYWEIGHT每天跟MM發(fā)短信,手指都累死了,最近買了個新手機,可以把一些常用的句子存在手機里,要用的時候,直接拿出來,在前面加上MM的名字就可以發(fā)送了,再不用一個字一個字敲了。共享的句子就是Flyweight,MM的名字就是提取出來的外部特征,根據上下文情況使用。享元模式:FLYWEIGHT在拳擊比賽中指最輕量級。享元模式以共享的方式高效的支持大量的細粒度對象。享元模式能做到共享的關鍵是區(qū)分內蘊狀態(tài)和外蘊狀態(tài)。內蘊狀態(tài)存儲在享元內部,不會隨環(huán)境的改變而有所不同。外蘊狀態(tài)是隨環(huán)境

55、的改變而改變的。外蘊狀態(tài)不能影響內蘊狀態(tài),它們是相互獨立的。將可以共享的狀態(tài)和不可以共享的狀態(tài)從常規(guī)類中區(qū)分開來,將不可以共享的狀態(tài)從類里剔除出去??蛻舳瞬豢梢灾苯觿?chuàng)建被共享的對象,而應當使用一個工廠對象負責創(chuàng)建被共享的對象。享元模式大幅度的降低內存中對象的數量。享元模式 運用共享技術共享技術有效地支持大量細粒度的對象 模式結構中的四種角色 1.享元接口(Flyweight) 2.具體享元(Concrete Flyweight) 3.享元工廠(Flyweight Factory) 4.客戶端(Client)類 圖享元模式的特點享元模式的特點 享元模式的意圖是通過共享有效支持大量細粒度的對象,來

56、提供應用程序的性能,節(jié)省系統(tǒng)中重復創(chuàng)建對象實例的性能消耗 這個怎么理解呢? 1、當我們系統(tǒng)中某個對象類型的實例較多的情況。 2、并且要求這些實例進行分類后,發(fā)現真正有區(qū)別的分類很少的情況。享元模式的使用場景享元模式的使用場景 1、當我們發(fā)現某個類型的對象有大量的實例時,我們是否可以對這些實例進行分類,經過分類后,我們發(fā)現只有很少的類別的情況下。 2、我們發(fā)現通過使用享元模式后能夠提高系統(tǒng)的性能和不會帶來更多的復雜度時。享元模式的優(yōu)點 使用享元可以節(jié)省內存的開銷,特別適合處理大量細粒度對象,這些對象的許多屬性值是相同的,而且一旦創(chuàng)建則不容許修改 享元模式中的享元可以使用方法的參數接受外部狀態(tài)中的

57、數據,但外部狀態(tài)數據不會干擾到享元中的內部數據,這就使得享元可以在不同的環(huán)境中被共享13、Faade(門面)模式主講:汪慶鋒組員:沈仙橋、阮金晶、毛泉涌2頁頁FACADE我有一個專業(yè)的Nikon相機,我就喜歡自己手動調光圈、快門,這樣照出來的照片才專業(yè),但MM可不懂這些,教了半天也不會。幸好相機有Facade設計模式,把相機調整到自動檔,只要對準目標按快門就行了,一切由相機自動調整,這樣MM也可以用這個相機給我拍張照片了。門面模式:外部與一個子系統(tǒng)的通信必須通過一個統(tǒng)一的門面對象進行。門面模式提供一個高層次的接口,使得子系統(tǒng)更易于使用。每一個子系統(tǒng)只有一個門面類,而且此門面類只有一個實例,也就

58、是說它是一個單例模式。但整個系統(tǒng)可以有多個門面類。4.Facade模式登場 定義:將子系統(tǒng)中的各類(或結構與方法)整合成一個簡明一致的界面,隱藏子系統(tǒng)的復雜性,使子系統(tǒng)更加容易使用。4.Facade模式登場(續(xù)) 簡單結構圖FacadeClient2Client1Client3subsystem4.Facade模式登場(續(xù))模式實現 定義一個(或多個)具備所需接口的新類(門面類) 新類(門面類)使用原有的系統(tǒng) 客戶使用門面類對象與原系統(tǒng)打交道6.模式剖析 結合前面的Facade模式結構圖來分析周星星看病這個實際例子:圖中的subsystem對應了掛號、劃價、繳費、取藥這些操作集合;Facade

59、對應了接待員Receptionist對象;然后Client對應了病人周星星。6.模式剖析(續(xù)) 接待員Receptionist對象將子系統(tǒng)中的多個接口重新封裝成一個更高層、更簡單的接口供Client使用,將子系統(tǒng)的復雜性隱藏起來,將子系統(tǒng)與Client的聯(lián)系解耦。 用戶不必關心子系統(tǒng)的運作方式,只需和Facade也即Receptionist對象打交道,完成自己所需的工序。7.模式優(yōu)點 它對客戶屏蔽子系統(tǒng)組件,因而減少了客戶處理的對象的數目并使得子系統(tǒng)使用起來更加方便。 它實現了子系統(tǒng)與客戶之間的松耦合關系,而子系統(tǒng)內部的功能組件往往是緊耦合的。 如果應用需要,它并不限制用戶使用子系統(tǒng)類,因此你

60、可以在系統(tǒng)易用性和通用性之間加以選擇。8.模式適用場合 當你要為一個復雜子系統(tǒng)提供一個簡單接口時。 客戶只需要使用某個復雜系統(tǒng)的子集,或者需要以一種特殊的方式與系統(tǒng)交互。 希望封裝或者隱藏原系統(tǒng)時。9.迪米特法則 只與你直接的朋友們通信。 迪米特法則要求一個對象的相互作用是短程的,朋友的數目越少越好,其實質是減少耦合度。 Facade模式符合迪米特法則。10.模式的變體 典型的門面模式強調不應該引入新的功能。 門面模式的變體可以適當引入新的功能,補充系統(tǒng)的原有功能。11.模式的原理 Facade模式將類重新設計,將原來分散的類/結構及方法重新組合,形成新的、統(tǒng)一的接口,供上層應用使用。 在某種

溫馨提示

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

評論

0/150

提交評論