




版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、設(shè)計(jì)模式網(wǎng)址:模式:是在某情境(context)下,針對(duì)某問(wèn)題的某種解決方案。反模式:告訴你如何采用一個(gè)不好的解決方案解決一個(gè)問(wèn)題。模式分類:第一種分類:1創(chuàng)建型: 創(chuàng)建型模式涉及到將對(duì)象實(shí)例化,這類模式都提供一個(gè)方法,將客戶從所需要實(shí)例化的對(duì)象中解耦。 Singleton, Abstract Factory, Factory Method, Prototype, Builder2結(jié)構(gòu)型:結(jié)構(gòu)型模式可以讓你把類或?qū)ο蠼M合到更大的結(jié)構(gòu)中。 Decorator, Composite, Adapter, Facade, Proxy, Flyweight, Bridge3行為型:只要是行為型模式都設(shè)計(jì)
2、到類和對(duì)象如何交互及分配職責(zé)。 Template Method, Command, Iterator, Observer,State, Strategy Mediator, Visitor, Interpreter, Chain of Responsibility,Memento第二種分類1.類:類模式描述類之間的關(guān)系如何通過(guò)繼承定義。類模式的關(guān)系是在編譯時(shí)建立的。 Template Method, Factory Method, Adapter, Interpreter2.對(duì)象:對(duì)象模式描述對(duì)象之間的關(guān)系,而且主要是利用組合定義。對(duì)象模式的關(guān)系通常在運(yùn)行時(shí)建立,而且更加動(dòng)態(tài)、更有彈性。設(shè)計(jì)原
3、則:1. 找出應(yīng)用中可能需要變化之處,把它們獨(dú)立出來(lái),不要和那些不需要變化的代碼混在一起。P472. 針對(duì)接口編程,而不是針對(duì)實(shí)現(xiàn)編程。 P493. 多用組合,少用繼承。P614. 為了交互對(duì)象之間的松耦合設(shè)計(jì)而努力。 P905. 開放-關(guān)閉原則:P123類應(yīng)該對(duì)擴(kuò)展開放,對(duì)修改關(guān)閉。6. 依賴倒置原則(Dependency Inversion): P176 要依賴抽象,不要依賴具體類。 7. 最少知識(shí)原則(Least Knowledge): P302只和你的密友談話。8. 好萊塢原則: P333別調(diào)用(打電話給)我們,我們會(huì)調(diào)用(打電話給)你。9. 一個(gè)類應(yīng)該只有一個(gè)引起變化的原因。P376
4、模式定義:1策略模式(Strategy Pattern): 定義了算法族,分別封裝起來(lái),讓它們之間可以互相替換,此模式讓算法的變化獨(dú)立于使用算法的客戶。2觀察者模式(Observer Pattern):定義了對(duì)象之間的一對(duì)多依賴,這樣一來(lái),當(dāng)一個(gè)對(duì)象改變狀態(tài)時(shí),它的所有依賴者都會(huì)收到通知并自動(dòng)更新。注:可以使用Java內(nèi)置的觀察者模式importimportnotifyObservers() “拉” 每個(gè)觀察者要從被觀察者中取數(shù)據(jù) notifyObservers(Object arg) “推” 當(dāng)通知時(shí),此版本可以傳送任何的數(shù)據(jù)對(duì)象給每一個(gè)觀察者。Observable是一個(gè)“類”,被觀察者只能
5、繼承它,但是就不可以繼承其他類了。Observer是一個(gè)接口。3裝飾者模式(Decorator Pattern):動(dòng)態(tài)地將責(zé)任附加到對(duì)象上。想要擴(kuò)展功能,裝飾者提供有別于繼承的另一種選擇。注:裝飾者可以在被裝飾者的行為前面/或后面加上自己的行為,甚至將被裝飾者的行為整個(gè)取代掉,而達(dá)到特定目的。你可以用無(wú)數(shù)個(gè)裝飾者包裝一個(gè)組件。但是裝飾者會(huì)導(dǎo)致設(shè)計(jì)中出現(xiàn)許多小對(duì)象,如果過(guò)度使用,會(huì)讓程序變得很復(fù)雜。4工廠方法模式(Factory Method Pattern):定義了一個(gè)創(chuàng)建對(duì)象的接口,但由于子類決定要實(shí)例化的類是哪一個(gè)。工廠方法讓類把實(shí)例化推遲到子類。5抽象工廠模式(Abstract Fact
6、ory Pattern):提供一個(gè)接口,用于創(chuàng)建相關(guān)或依賴對(duì)象的家族,而不需要明確指定具體類。注:工廠方法使用繼承:把對(duì)象的創(chuàng)建委托給子類,子類實(shí)現(xiàn)工廠方法來(lái)創(chuàng)建對(duì)象。抽象工廠使用對(duì)象組合:對(duì)象的創(chuàng)建被實(shí)現(xiàn)在工廠接口所暴露出來(lái)的方法中。6單件模式(Singleton Pattern):確保一個(gè)類只有一個(gè)實(shí)例,并提供一個(gè)全局訪問(wèn)點(diǎn)。注:經(jīng)典的單件模式public class Singleton private static Singleton uniqueInstance;private Singleton() public static Singleton getInstance() if (
7、uniqueInstance = null) uniqueInstance = new Singleton();return uniqueInstance;但是如果是多線程的話,可能會(huì)生成兩個(gè)實(shí)例。只要把getInstance()變成同步(synchronized)方法,但是會(huì)影響性能。而且只有第一次執(zhí)行此方法時(shí)才真正需要同步。改善多線程方法有3:a) 如果getInstance()的性能對(duì)應(yīng)用程序不是很關(guān)鍵,就什么都別做。b) 使用“急切”創(chuàng)建實(shí)例,而不用延遲實(shí)例化的做法。public class Singleton private static Singleton uniqueInstan
8、ce = new Singleton(); private Singleton() public static Singleton getInstance() return uniqueInstance;c) 用”雙重檢查加鎖”,在getInstance()中減少使用同步。首先檢查是否實(shí)例已經(jīng)創(chuàng)建了,如果尚未創(chuàng)建,“才”進(jìn)行同步。這樣一來(lái),只有第一次會(huì)同步。public class Singleton private volatile static Singleton uniqueInstance; private Singleton() public static Singleton get
9、Instance() if (uniqueInstance = null) synchronized (Singleton.class) if (uniqueInstance = null) uniqueInstance = new Singleton();return uniqueInstance;7命令模式(Command Pattern):將“請(qǐng)求”封裝成對(duì)象,以便使用不同的請(qǐng)求、隊(duì)列或者日志來(lái)參數(shù)化其他對(duì)象。命令模式也支持可撤銷的操作。命令模式更多的用途:隊(duì)列請(qǐng)求,日志請(qǐng)求8適配器模型(Adapter Pattern):將一個(gè)類的接口,轉(zhuǎn)換成客戶期望的另一個(gè)接口。適配器讓原本接口不兼容
10、的類可以合作無(wú)間。注:適配器有兩種形式:對(duì)象適配器和類適配器。類適配器需要用到多繼承。9外觀模式(Facade Pattern):提供了一個(gè)統(tǒng)一的接口,用來(lái)訪問(wèn)子系統(tǒng)中的一群接口。外觀定義了一個(gè)高層接口,讓子系統(tǒng)更容易使用。注:a. 當(dāng)需要使用一個(gè)現(xiàn)有的類而其接口并不符合你的需要時(shí),就使用適配器;當(dāng)需要簡(jiǎn)化并統(tǒng)一一個(gè)很大的接口或者一群復(fù)雜的接口時(shí),使用外觀。b. 適配器改變接口以符合客戶的期望;外觀將客戶從一個(gè)復(fù)雜的子系統(tǒng)中解耦。c. 適配器將一個(gè)對(duì)象包裝起來(lái)以改變其接口;裝飾者將一個(gè)對(duì)象包裝起來(lái)以增加新的行為和責(zé)任;而外觀將一群對(duì)象“包裝”起來(lái)以簡(jiǎn)化其接口。10模塊方法模式(Template
11、 Method Pattern):在一個(gè)方法中定義一個(gè)算法的骨架,而將一些步驟延遲到子類中。模塊方法使得子類可以在不改變算法結(jié)構(gòu)的情況下,重新定義算法中的某些步驟。注: a. 策略模式和模板方法模式都封裝算法,一個(gè)用組合,一個(gè)用繼承。b. 工廠方法是模板方法的一種特殊版本。c. 鉤子是一種方法,它在抽象類中不做事,或者只做默認(rèn)的事情,子類可以選擇要不要去覆蓋它。常見(jiàn)的鉤子如Sort算法中的CompareTo(),JFame中的paint(),Applet中的init(),start(),stop(),destroy()。11迭代器模式(Iterator Pattern):提供一種方法順序訪問(wèn)一
12、個(gè)聚合對(duì)象中的各個(gè)元素,而又不暴露其內(nèi)部的表示。12組合模式(Composite Pattern):允許你將對(duì)象組合成樹形結(jié)構(gòu)來(lái)表現(xiàn)“整體/部分”層次結(jié)構(gòu)。組合能讓客戶以一致的方式處理個(gè)別對(duì)象以及對(duì)象組合。13狀態(tài)模式(State Pattern):允許對(duì)象在內(nèi)部狀態(tài)改變時(shí)改變它的行為,對(duì)象看起來(lái)好像修改了它的類。注:狀態(tài)模式和策略模式有相同的類圖,但是它們的意圖不同。策略模式通常會(huì)用行為或算法來(lái)配置Context類。狀態(tài)模式允許Context隨著狀態(tài)的改變而改變行為。14代理模式(Proxy Pattern):為另一個(gè)對(duì)象提供一個(gè)替身或占位符以控制對(duì)這個(gè)對(duì)象的訪問(wèn)。注:遠(yuǎn)程代理管理客戶和遠(yuǎn)程
13、對(duì)象之間的交互;虛擬代理控制訪問(wèn)實(shí)例化開銷大的對(duì)象;保護(hù)代理基于調(diào)用者控制對(duì)對(duì)象方法的訪問(wèn)。代理還有很多變體,例如:緩存代理、同步代理、防火墻代理和寫入時(shí)復(fù)制代理。代理在結(jié)構(gòu)上類似裝飾者,但是目的不同。裝飾者模式為對(duì)象加上行為,而代理則是控制訪問(wèn)。*復(fù)合模式:復(fù)合模式結(jié)合兩個(gè)或以上的模式,組成一個(gè)解決方案,解決一再發(fā)生的一般性問(wèn)題。-15橋接模式(Bridge Pattern):使用橋接模式不只改變你的實(shí)現(xiàn),也改變你的抽象。注:優(yōu)點(diǎn):將實(shí)現(xiàn)予以解耦,讓它和界面之間不再永久綁定; 抽象和實(shí)現(xiàn)可以獨(dú)立擴(kuò)展,不會(huì)影響到對(duì)方; 對(duì)于“具體的抽象類”所做的改變,不會(huì)影響到客戶。用途和缺點(diǎn):適合使用在需要
14、跨越多個(gè)平臺(tái)的圖形和窗口系統(tǒng)上;當(dāng)需要用不同的方式改變接口和實(shí)現(xiàn)時(shí),你會(huì)發(fā)現(xiàn)橋接模式很好用;橋接模式的缺點(diǎn)是增加了復(fù)雜度。16生成器模式(Builder Pattern):使用生成器模式封裝一個(gè)產(chǎn)品的構(gòu)造過(guò)程,并允許按步驟構(gòu)造。注:優(yōu)點(diǎn):將一個(gè)復(fù)雜對(duì)象的創(chuàng)建過(guò)程封裝起來(lái);允許對(duì)象通過(guò)多個(gè)步驟來(lái)創(chuàng)建,并且可以改變過(guò)程(這和只有一個(gè)步驟的工廠模式不同)向客戶隱藏產(chǎn)品內(nèi)部表現(xiàn)。產(chǎn)品的實(shí)現(xiàn)額可以被替換,因?yàn)榭蛻糁豢吹揭粋€(gè)抽象的接口。17責(zé)任鏈(Chain of Responsibility Pattern):當(dāng)你想要讓一個(gè)以上的對(duì)象有機(jī)會(huì)能夠處理某個(gè)請(qǐng)求的時(shí)候,就使用責(zé)任鏈模式。注:優(yōu)點(diǎn):將請(qǐng)求的發(fā)送
15、者和接受者解耦; 可以簡(jiǎn)化你的對(duì)象,因?yàn)樗恍枰梨湹慕Y(jié)構(gòu); 通過(guò)改變鏈內(nèi)成員或調(diào)用它們的次序,允許你動(dòng)態(tài)地新增或者刪除責(zé)任。用途:經(jīng)常被使用在窗口系統(tǒng)中,處理鼠標(biāo)和鍵盤這類的事情。缺點(diǎn):并不保證請(qǐng)求一定會(huì)被執(zhí)行;如果沒(méi)有任何對(duì)象處理它的話,它可能會(huì)落到鏈尾端之外??赡懿蝗菀子^察運(yùn)行時(shí)的特征,有礙于除錯(cuò)。18蠅量模式(Flyweight Pattern):如想讓某個(gè)類的一個(gè)實(shí)例能用來(lái)提供許多“虛擬實(shí)例”,就是用蠅量模式。注:優(yōu)點(diǎn): 減少運(yùn)行時(shí)對(duì)象實(shí)例的個(gè)數(shù),節(jié)省內(nèi)存。 將許多“虛擬”對(duì)戲那個(gè)的狀態(tài)集中管理。用途: 當(dāng)一個(gè)類有去多實(shí)例,而這些實(shí)例能被同一方法控制的時(shí)候,就可以用。缺點(diǎn): 一點(diǎn)你
16、實(shí)現(xiàn)了,那么單個(gè)的邏輯實(shí)例將無(wú)法擁有獨(dú)立而不同的行為。19解釋器模式(Interpreter Pattern):為語(yǔ)言建解釋器。注:優(yōu)點(diǎn):將每一個(gè)語(yǔ)法規(guī)則表示成一個(gè)類,方便于實(shí)現(xiàn)語(yǔ)言; 因?yàn)檎Z(yǔ)法由許多類表示,所以可以輕易改變或擴(kuò)展此語(yǔ)言; 通過(guò)在類結(jié)構(gòu)中加入新的方法,可以在解釋的同時(shí)增加新的行為。 用途:當(dāng)需要實(shí)現(xiàn)一個(gè)簡(jiǎn)單的語(yǔ)言時(shí);當(dāng)你有一個(gè)簡(jiǎn)單的語(yǔ)法,而且簡(jiǎn)單比效率更重要時(shí)。可以用處理腳本語(yǔ)言和編程語(yǔ)言。 缺點(diǎn):當(dāng)語(yǔ)法規(guī)則的數(shù)目太大時(shí),這個(gè)模式可能會(huì)變得非常繁雜。在這種情況下,使用解析器/編譯器的產(chǎn)生器可能更合適。 20中介者(Mediator Pattern):使用中介者模式來(lái)集中相關(guān)對(duì)象
17、之間復(fù)雜的溝通和控制方式。注:優(yōu)點(diǎn):通過(guò)將對(duì)象彼此解耦,可以增加對(duì)象的復(fù)用性。 通過(guò)將控制邏輯集中,可以簡(jiǎn)化系統(tǒng)維護(hù)。 可以讓對(duì)象之間所傳遞的消息變得簡(jiǎn)單而且大幅減少。21備忘錄模式(Memento Pattern):當(dāng)你需要讓對(duì)象返回之前的狀態(tài)(例如你的用戶請(qǐng)求“撤銷”),就是用備忘錄模式。注:優(yōu)點(diǎn):將被儲(chǔ)存的狀態(tài)放在外面,不要和關(guān)鍵對(duì)象混在一起,可提高內(nèi)聚性; 保持關(guān)鍵對(duì)象的數(shù)據(jù)封裝; 提供了容易實(shí)現(xiàn)的恢復(fù)能力。用途:用于儲(chǔ)存狀態(tài)。缺點(diǎn): 儲(chǔ)存和恢復(fù)狀態(tài)的過(guò)程可能相當(dāng)耗時(shí)。在Java系統(tǒng)中,其實(shí)可以考慮使用序列化機(jī)制儲(chǔ)存系統(tǒng)的狀態(tài)。22原型模式(Prototype Pattern): 當(dāng)創(chuàng)建給定類的實(shí)例過(guò)程很昂貴或很復(fù)雜時(shí),就是用原型模型。注:優(yōu)點(diǎn):向客戶隱藏制造新實(shí)例
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 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ì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 餐飲企業(yè)品牌授權(quán)及合作推廣合同
- 公共交通樞紐停車場(chǎng)車位使用權(quán)轉(zhuǎn)讓合同
- 餐飲公司廚師崗位晉升與勞動(dòng)合同
- 拆除工程安全生產(chǎn)責(zé)任保險(xiǎn)合同
- 《有效教學(xué)》課件
- 醫(yī)學(xué)常見(jiàn)病癥診斷與處理知識(shí)測(cè)試試卷
- 《初二數(shù)學(xué)概率統(tǒng)計(jì)初步學(xué)習(xí)教案》
- 小學(xué)周長(zhǎng)教學(xué)課件
- 企業(yè)廢物管理與環(huán)境保護(hù)法律法規(guī)的執(zhí)行效果評(píng)估考核試卷
- 交通安全宣傳教育政策研究考核試卷
- 譯林版(2024)七年級(jí)下冊(cè)英語(yǔ)期末復(fù)習(xí):完形填空+閱讀理解 練習(xí)題(含答案)
- 第5章 相交線與平行線 復(fù)習(xí)課件
- 廣東省廣州各區(qū)2025屆七下英語(yǔ)期末經(jīng)典試題含答案
- 企業(yè)科技論文管理制度
- 山東卷2025年高考?xì)v史真題
- 【中考真題】2025年福建中考數(shù)學(xué)真題試卷(含解析)
- 2025-2030年中國(guó)蝦苗行業(yè)市場(chǎng)現(xiàn)狀供需分析及投資評(píng)估規(guī)劃分析研究報(bào)告
- 肺曲霉菌病治療講課件
- 頂端分生組織穩(wěn)態(tài)調(diào)控-洞察闡釋
- 2025年農(nóng)業(yè)經(jīng)濟(jì)學(xué)考試試題及答案
- 2025至2030年中國(guó)硫化橡膠制避孕套行業(yè)供需態(tài)勢(shì)分析及投資機(jī)會(huì)分析報(bào)告
評(píng)論
0/150
提交評(píng)論