設(shè)計(jì)模式

《HeadFirst設(shè)計(jì)模式》讀書筆記

1.策略模式: 定義了算法族,分別封裝起來,讓他們之間可以互相替換,此模式讓算法的變化使用獨(dú)立于算法的客戶。

????設(shè)計(jì)原則1:找出應(yīng)用中可能需要變化之處,把它們獨(dú)立出來,不要和不需要變化的代碼混在一起。

????設(shè)計(jì)原則2:針對接口編程,而不是針對實(shí)現(xiàn)編程(這里“接口”是一種概念,不單指java的Interface,指超類型)

????設(shè)計(jì)原則3:多用組合,少用繼承

策略模式

2.觀察者模式:定義了對象間的一對多依賴,當(dāng)一個對象改變狀態(tài)時,它的所有依賴者都會得到通知并更新

?出版者? ? ? ? ? ? +? ? ? ? ? 訂閱者? ? ? ? ? ? ? ? ? =? ?觀察者模式

(主題Observable)? ? ? ? ? ? ? (觀察者Observer)

設(shè)計(jì)原則4:為對象間的松耦合設(shè)計(jì)而努力


觀察者模式


Java里面有與之對應(yīng)的java.util包的Observable類(對應(yīng)Subject接口),和Observer接口,如下圖。

Java中內(nèi)置的觀察者模式

3.裝飾者模式:動態(tài)地將責(zé)任附加到對象上。若要擴(kuò)展功能,裝飾者提供了比繼承更有彈性的替代方案。

設(shè)計(jì)原則5:類應(yīng)該對擴(kuò)展開放,對修改關(guān)閉(開放-閉合原則)


裝飾者模式

可以用一個裝飾者包裝一個對象(被裝飾者),裝飾者和被裝飾者擁有相同的超類型,所以可以用裝飾過的對象代替它,裝飾者可以在所委托的被裝飾者的行為之前或之后,加上自己的行為已達(dá)到特定的目的。

(每個裝飾者有一個(包裝一個)組件,就是有個實(shí)例變量來保存component的引用(我想到的是類似鏈表))

裝飾者模式的特點(diǎn)

Java.io 應(yīng)用到了裝飾者模式

IO流應(yīng)用裝飾者模式

4.工廠模式:定義了一個創(chuàng)建對象的接口,但由子類決定實(shí)例化的類是哪一個,工廠方法讓類把實(shí)例化推遲到子類


創(chuàng)建一個抽象類,創(chuàng)建實(shí)例的方法聲明為抽象方法。

工廠模式

設(shè)計(jì)原則6:要依賴抽象,不要依賴具體類(依賴倒置原則)

不能讓高層組件依賴底層組件。無論是高層底層,都應(yīng)該依賴抽象。

抽象工廠模式:提供一個接口,用于創(chuàng)建相關(guān)或依賴的家族,而不需要明確指定具體類。

抽象工廠和工廠模式的區(qū)別:抽象工廠使用對象組合(接口),工廠模式使用繼承,一個抽象工廠會包含多個工廠方法。


5.單例模式:確保一個類只有一個實(shí)例,并提供一個全局訪問點(diǎn)。

應(yīng)用到單例模式的地方包括:線程池、緩存、對話框、注冊表、日志、打印機(jī)、顯卡等設(shè)備的驅(qū)動。

單例模式實(shí)現(xiàn)的方法是將單例類的構(gòu)造器私有化,保證只有在此類中才能創(chuàng)建實(shí)例,再創(chuàng)建一個靜態(tài)的創(chuàng)建實(shí)例的方法。

例如:? ?public class Singleton{

? ? ? ? ? ? ? ? ? ? private static Singleton? uniqueInstance; // 利用一個靜態(tài)變量作為singleton的唯一實(shí)例

????????????????????private? Singleton(){};? ? ? ? ? ? ? //構(gòu)造器會在new Xxx() 得到返回值之前執(zhí)行,構(gòu)造器私有,保證只有? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 有Singleton類才可以調(diào)用

? ? ? ? ? ? ? ? ? ? public static Singleton getInstance(){

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? if(?uniqueInstance == null)

? ???????????????????????????????????????uniqueInstance =? new Singleton();

????????????????????????????????return? uniqueInstance;

? ? ? ? ? ? ? ? ? ?}

? ? ? ? }



6.命令模式:將“請求”封裝成對象,以便于使用不同的請求、隊(duì)列或者日志來參數(shù)化其他對象。命令模式也支持可撤銷操作。



命令模式

需要將發(fā)出請求的對象和執(zhí)行請求的對象解耦的時候,使用命令模式。

1. 命令模式將發(fā)出請求的對象和執(zhí)行請求的對象解耦。

2. 在被解耦的兩者間是用命令對象溝通的,命令對象封裝了執(zhí)行對象和一個或者一組動作(請求)。

(命令模式還可以實(shí)現(xiàn) 撤銷功能、將一組命令一起執(zhí)行的宏命令功能、隊(duì)列請求、日志請求等功能)

7.適配器模式:將一個類的接口,轉(zhuǎn)換成客戶期望的另一個接口。適配器讓原本接口不相容的類合作無間。

適配器模式

適配器改變接口,以符合客戶的需求。

對象適配器使用組合,類適配器需要使用多繼承(Java做不到)


8.外觀模式:提供了一個統(tǒng)一的接口,用來訪問子系統(tǒng)中的一群接口。外觀定義了一個高層接口,讓子系統(tǒng)更容易使用。

設(shè)計(jì)原則7(最少知識原則):類盡可能少地和其他類發(fā)生交互(減少對象之間的交互,只留下幾個密友)。

最少知識原則和德墨忒爾法則指的是同一個,最少知識原則更名字更貼切。

外觀模式

外觀模式可以把子系統(tǒng)里面的多個方法集中到一個外觀類的方法里。例如有一個家庭影院系統(tǒng),點(diǎn)擊觀影模式會自動完成播放影片,降低亮度,開啟音效和爆米花機(jī)等多個功能。

外觀模式將客戶從一個復(fù)雜的子系統(tǒng)中解耦。

外觀和適配器可以包裝許多類,但是外觀的意圖是簡化接口,而適配器的意圖是將接口轉(zhuǎn)化成不同接口。

9.模板方法模式:在一個方法中定義一個算法的骨架,而將一些步驟延遲到子類中。模板方法可以使子類在不改變算法結(jié)構(gòu)的情況下,重新定義算法的某些驟。

模板方法模式

設(shè)計(jì)原則8(好萊塢原則):別調(diào)用(打電話給)我們,我們會調(diào)用(打電話給)你們。

好萊塢原則告訴我們,將決策權(quán)放在高層模塊中,以便決定如何以及何時調(diào)用底層模塊。

模板方法的抽象類可以定義具體方法、抽象方法和鉤子。

鉤子是一種方法,它在抽象類中不做任何事,或者做默認(rèn)的事,子類可以選擇要不要覆蓋它。

為了防止子類修改模板方法中的算法,可以把模板中的算法聲明為final。

策略模式和模板方法模式都封裝算法,一個用組合,一個用繼承。

工廠方法是模板方法中的一個特殊版本。

10.迭代器模式:提供一個方法順序訪問一個聚合內(nèi)的各個元素,而又不暴露其內(nèi)部的具體表示。

把游走的任務(wù)放在迭代器上,而不是集合上。這樣簡化了集合的接口和實(shí)現(xiàn),也讓集合各得其所。

設(shè)計(jì)原則9:一個類應(yīng)該只有一個引起變化的原因。

迭代器模式

11.組合模式:允許你將對象組合成樹形結(jié)構(gòu)來表現(xiàn)“整體/部分”層次結(jié)構(gòu)。組合能讓客戶以一致的方式處理個別對象以及對象組合。

組合模式讓我們能用樹形方式創(chuàng)建對象的結(jié)構(gòu),樹里面包含了組合以及個別對象

使用組合結(jié)構(gòu),我們能把相同的操作應(yīng)用在組合和個別對象上。換句話說,在大多數(shù)情況下, 我們可以忽略對象組合和個別對象之間的差別。

組合模式

組合結(jié)構(gòu)內(nèi)的任意對象稱為組件,組件可以是組合,也可以是葉結(jié)點(diǎn)。

在實(shí)現(xiàn)組合模式時,有許多技術(shù)上的折衷。你要根據(jù)需要平衡透明性和安全性。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 設(shè)計(jì)模式匯總 一、基礎(chǔ)知識 1. 設(shè)計(jì)模式概述 定義:設(shè)計(jì)模式(Design Pattern)是一套被反復(fù)使用、多...
    MinoyJet閱讀 4,096評論 1 15
  • 設(shè)計(jì)模式基本原則 開放-封閉原則(OCP),是說軟件實(shí)體(類、模塊、函數(shù)等等)應(yīng)該可以拓展,但是不可修改。開-閉原...
    西山薄涼閱讀 4,086評論 3 14
  • 一、設(shè)計(jì)模式的分類 總體來說設(shè)計(jì)模式分為三大類: 創(chuàng)建型模式,共五種:工廠方法模式、抽象工廠模式、單例模式、建造者...
    RamboLI閱讀 836評論 0 1
  • 原文鏈接:http://blog.csdn.net/zhangerqing http://www.cnblogs....
    孤獨(dú)雜貨鋪閱讀 1,641評論 0 3
  • 家,是最溫暖的。當(dāng)我們受挫時,它是個永不傾倒的避風(fēng)港;在我們泄氣時,它是個用不壞的充氣機(jī),不停地給與支持和鼓...
    千柚閱讀 538評論 0 0

友情鏈接更多精彩內(nèi)容