設(shè)計模式

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

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

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

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

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

策略模式

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

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

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

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


觀察者模式


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

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

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

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


裝飾者模式

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

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

裝飾者模式的特點

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

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

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


創(chuàng)建一個抽象類敲董,創(chuàng)建實例的方法聲明為抽象方法紫皇。

工廠模式

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

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

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

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


5.單例模式:確保一個類只有一個實例穗泵,并提供一個全局訪問點普气。

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

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

例如:? ?public class Singleton{

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

????????????????????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.命令模式:將“請求”封裝成對象抖坪,以便于使用不同的請求、隊列或者日志來參數(shù)化其他對象闷叉。命令模式也支持可撤銷操作擦俐。



命令模式

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

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

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

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

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

適配器模式

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

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


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

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

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

外觀模式

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

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

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

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

模板方法模式

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

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

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

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

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

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

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

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

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

設(shè)計原則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é)點扫腺。

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

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市厚者,隨后出現(xiàn)的幾起案子躁劣,更是在濱河造成了極大的恐慌,老刑警劉巖籍救,帶你破解...
    沈念sama閱讀 216,402評論 6 499
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件习绢,死亡現(xiàn)場離奇詭異,居然都是意外死亡蝙昙,警方通過查閱死者的電腦和手機闪萄,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,377評論 3 392
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來奇颠,“玉大人败去,你說我怎么就攤上這事×揖埽” “怎么了圆裕?”我有些...
    開封第一講書人閱讀 162,483評論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長荆几。 經(jīng)常有香客問我吓妆,道長,這世上最難降的妖魔是什么吨铸? 我笑而不...
    開封第一講書人閱讀 58,165評論 1 292
  • 正文 為了忘掉前任行拢,我火速辦了婚禮,結(jié)果婚禮上诞吱,老公的妹妹穿的比我還像新娘舟奠。我一直安慰自己,他們只是感情好房维,可當(dāng)我...
    茶點故事閱讀 67,176評論 6 388
  • 文/花漫 我一把揭開白布沼瘫。 她就那樣靜靜地躺著,像睡著了一般咙俩。 火紅的嫁衣襯著肌膚如雪耿戚。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,146評論 1 297
  • 那天,我揣著相機與錄音溅话,去河邊找鬼晓锻。 笑死歌焦,一個胖子當(dāng)著我的面吹牛飞几,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播独撇,決...
    沈念sama閱讀 40,032評論 3 417
  • 文/蒼蘭香墨 我猛地睜開眼屑墨,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了纷铣?” 一聲冷哼從身側(cè)響起卵史,我...
    開封第一講書人閱讀 38,896評論 0 274
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎搜立,沒想到半個月后以躯,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,311評論 1 310
  • 正文 獨居荒郊野嶺守林人離奇死亡啄踊,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,536評論 2 332
  • 正文 我和宋清朗相戀三年忧设,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片颠通。...
    茶點故事閱讀 39,696評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡址晕,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出顿锰,到底是詐尸還是另有隱情谨垃,我是刑警寧澤,帶...
    沈念sama閱讀 35,413評論 5 343
  • 正文 年R本政府宣布硼控,位于F島的核電站刘陶,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏牢撼。R本人自食惡果不足惜匙隔,卻給世界環(huán)境...
    茶點故事閱讀 41,008評論 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望浪默。 院中可真熱鬧牡直,春花似錦、人聲如沸纳决。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,659評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽阔加。三九已至饵史,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背胳喷。 一陣腳步聲響...
    開封第一講書人閱讀 32,815評論 1 269
  • 我被黑心中介騙來泰國打工湃番, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人吭露。 一個月前我還...
    沈念sama閱讀 47,698評論 2 368
  • 正文 我出身青樓吠撮,卻偏偏與公主長得像,于是被迫代替她去往敵國和親讲竿。 傳聞我的和親對象是個殘疾皇子泥兰,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,592評論 2 353

推薦閱讀更多精彩內(nèi)容

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