1. 程式人生 > >HEAD FIRST設計模式讀後感

HEAD FIRST設計模式讀後感

最近花了幾天時間讀完了HEAD FIRST設計模式,因為之前已經粗粗的瞭解過GOF 23個設計模式,所以在讀本書時基本上都能理解,我被裡面簡單的示例,獨到的理解所折服,毫無疑問這是一本極好的設計模式領域的入門書籍。它以例項講解了每個面向物件設計原則,並通過設計模式的方法提供了詳盡的解決方案,讓我對面向物件的設計原則有了更深入的理解:

封裝變化

組合優於繼承

針對介面程式設計,而不針對實現程式設計

為互動物件間鬆耦合的設計而努力

類應該對擴充套件開放,對修改關閉

依賴於抽象,而不依賴於具體類

這本書讀完我最大的感觸是裝飾模式,裝飾物件是對原類進行擴充套件而不需要修改類本身,裝飾物件可以多重組合,這觸動了我對這種特殊的程式設計技巧的感觸。當然這本書裡最大的不足了23種設計模式沒有全部用例項講解完,這多有點有對不起它600多頁的厚度。同時,他提供的類圖不是標準的UML,這也是我很不喜歡的地方,我覺得UML是最佳的記憶和交流設計模式的方法,在UML圖面前那些具體而冗長的程式碼顯得微不足道。另外,它對部分模式的介紹我覺得有點複雜而不好理解,如組合、代理。

我對書中涉及介紹的模式作了下筆記:

1. 策略模式

策略模式定義了演算法簇,分別封裝起來,讓它們之間可以相互替換,此模式讓演算法的變化獨立於使用演算法的客戶。

封裝行為不變的部分,而將可變的行為部分作為抽象以待注入實現,提供演算法定製.

2. 觀察者

觀察者模式定義了物件之間一對多的依賴,這樣一來,當一個物件狀態改變時,它的所有依賴都收到通知並自動更新。

涉及角色:主題,觀察者,通知介面 jdk自帶:Observer,Observable

3. 裝飾器

裝飾器模式動態地將責任附加到物件上。若要擴充套件功能,裝飾器提供了比繼承更有彈性的替代方案。

涉及的角色:統一的抽象(抽象類或介面),被裝飾類和裝飾類均實現繼承

(實現)此抽象(介面),通過裝飾類實現對被裝飾類的呼叫.典型應用:jdk:InputStreamOutputStream。注意:順序依次裝飾

4. 工廠方法

工廠方法模式定義了一個建立物件的介面,但由子類決定要例項化的類是哪一個。工廠方法讓類把例項化推遲到子類。

把物件的例項化延遲到子類.涉及角色:factoryMethod

5. 抽象工廠

抽象工廠模式提供一個介面,用於建立相關或依賴物件的家族,而不需要明確指定具體類。

生產一簇產品的工廠方法

6. 單例模式

單例模式確保一個類只有一個例項,並提供一個全域性訪問點。

一個類只允許一個例項,雙重volatile+synchronized鎖檢查.

(防止多執行緒併發時重複建立例項)

7. 命令模式

命令模式“請求”封裝成物件,以便使用不同的請求、佇列或日誌來引數化其他物件。命令模式也支援可撤銷的操作。

涉及角色:client,invoker,receiver,command,concreteCommand

8. 介面卡

介面卡模式將一個類的介面,轉換成客戶期望的另一個介面。介面卡讓原本介面不相容的類可以合作無間。

進行介面適配,使原本不適配的呼叫變得可以呼叫,涉及角色:客戶、介面卡介面、介面卡實現、被適配的類。主要目的是適配。

9. 外觀模式(門戶)

外觀模式提供了一個統一的介面,用來訪問子系統中的一群介面。外觀定義了一個高層介面,讓子系統更容易使用。

簡化介面,主要目的是簡化客戶的訪問,並不屏閉外部對系統子類的直接訪問

10. 模板方法

模板方法模式在一個方法中定義一個演算法的骨架,而將一些步驟延遲到子類中。模板方法使得子類可以在不改變演算法結構的情況下,重新定義演算法中的某些步驟。

11. 迭代器

迭代器模式提供了一種方法順序訪問一個聚合物件中的各個元素,而又不暴露其內部的表示。

12. 組合

組合模式允許你將物件組合成樹形結構來表示“整體/部分”層次結構。組合能讓客戶以一致的方式處理個別對象以及物件組合。

涉及角色:client、介面(getChild)

13. 狀態

狀態模式允許物件在內部狀態改變時改變它的行為,物件看起來好像修改了它的類。(和策略模式類圖幾乎完全一致)

14. 代理

代理模式為另一個物件提供一個替身或佔位符以控制對這個物件的訪問。

另外書中將MVC編譯成了有趣的一首歌,這本書讓我對MVC模式的理解頓時領悟,原來MVC模式是多種設計模式組合而來的模式,分別是策略、觀察、組合!MVC是一種組合型的設計模式,是多種設計模式組合而來。


相關推薦

HEAD FIRST設計模式讀後感

最近花了幾天時間讀完了HEAD FIRST設計模式,因為之前已經粗粗的瞭解過GOF 23個設計模式,所以在讀本書時基本上都能理解,我被裡面簡單的示例,獨到的理解所折服,毫無疑問這是一本極好的設計模式領域的入門書籍。它以例項講解了每個面向物件設計原則,並通過設計模式的方法提供

Head First 設計模式》學習筆記——復合模式

listener 解讀 out 部件 register != file 窗體 event 模型-視圖-控制器(MVC模式)是一種很經典的軟件架構模式。在UI框架和UI設計思路中扮演著很重要的角色。從設計模式的角度來看,MVC模式是一種復合模式。它將多個設計模式在

Head First設計模式之模板方法模式

names 去除 缺點 ide 個數 write ima 父類 public 一、定義 在一個方法中定義一個算法的骨架,而將一些步驟延遲到子類中,使得子類可以不改變算法結構的情況下,重定義該算法中的某些特定步驟。 比較通俗的說法,子類決定如何實現算法中的某些步驟,比如兩

Head First設計模式之外觀模式

實現 add ads important pac mar private 入口 summary 一、定義 外觀模式提供了一個統一的接口,用來訪問子系統中的一群接口。外觀定義了一個高層接口,讓子系統更容易使用。 外觀模式不只是簡化了接口,也將客戶從組件的子系統中解耦。

Head First設計模式之代理模式

collect prot indent margin 虛擬代理 ans sig smart ati 一、定義 定義:為其他對象提供一種代理以控制對這個對象的訪問 在代理模式中,我們創建具有現有對象的對象,以便向外界提供功能接口。 二、結構 代理模式一般會有三個角

Head First設計模式之享元模式(蠅量模式

logs sign face isp ria reat 定義 ogr sans 一、定義 享元模式(Flyweight Pattern)主要用於減少創建對象的數量,以減少內存占用和提高性能。這種類型的設計模式屬於結構型模式,它提供了減少對象數量從而改善應用所需的對象結構的

Head First設計模式之原型模式

webkit ble -1 否則 type sof 異常 構圖 etc 用原型實例指定創建對象的種類,並且通過拷貝這些原型創建新的對象。 原型模式是一種比較簡單的模式,也非常容易理解,實現一個接口,重寫一個方法即完成了原型模式。在實際應用中,原型模式很少單獨出現。經常與其

Head First設計模式之狀態模式

對象狀態 initial fff rst actions arc sof ret %20 一、定義 定義:允許對象在內部狀態改變時改變它的行為, 對象看起來好像修改了它的類。 主要解決:對象的行為依賴於它的狀態(屬性),並且可以根據它的狀態改變而改變它的相關行為。 何

Head First設計模式之訪問者模式

back visitor 這樣的 耦合 擴展性 表示 accept struct system 一、定義 定義:表示一個作用於某對象結構中的各元素的操作。它使你可以在不改變各元素類的前提下定義作用於這些元素的新操作。 訪問者模式適用於數據結構相對穩定的系統, 它把數據結

Head First設計模式之中介者模式

函數 padding sta sin color 系列文章 自己的 技術 接口 一、定義 又稱為調停者模式,定義一個中介對象來封裝系列對象之間的交互。中介者使各個對象不需要顯示地相互引用,從而使其耦合性松散,而且可以獨立地改變他們之間的交互。 二、結構 組成:

Head First設計模式之解釋器模式

mes eval form value oid 對象 arc share hive 一、定義 給定一個語言,定義它的文法表示,並定義一個解釋器,這個解釋器使用該標識來解釋語言中的句子。 主要解決:對於一些固定文法構建一個解釋句子的解釋器。 何時使用:如果一種特定類型的

Head First設計模式之責任鏈模式

sre apple ria tap 空調 href 一個 -o webkit 一、定義   避免請求發送者與接收者耦合在一起,讓多個對象都有可能接收請求,將這些對象連接成一條鏈,並且沿著這條鏈傳遞請求,直到有對象處理它為止。   主要解決:職責鏈上的處理者負責處理請求,

Head First 設計模式》之裝飾者模式

的人 開放 override ext es2017 必須 想要 ret ted 前言:   時間過得挺快的,轉眼間就到了十月中旬了,再晃著晃著新的一年就要來臨。今天lz有幸來到了浙大圖書館來學習,想想自己已經畢業兩年了,今日再次踏進校園裏,心裏頗有一絲感悟,說不出來,只有把

Head first設計模式》學習筆記 – 叠代器模式

sys sorry 微軟雅黑 封裝 system ready 3.5 消息 all 《Head first設計模式》學習筆記 – 叠代器模式 代器模式提供一種方法順序訪問一個聚合對象中的各個元素,而又不暴露其內部的表示。 爆炸性新聞:對象村餐廳和對象村煎餅屋合並了!真是

Head First 設計模式“ :裝飾模式

裝飾模式 裝修模式 JAVAIO裝飾模式 裝飾模式 裝飾者模式:動態地將責任附加到對象上。若要擴展功能,裝飾者提供了比繼承更有彈性的替代方案。 裝修模式的角色如下:抽象構件角色(Component):給出一個抽象接口,以規範準備接收附加責任的對象。具體構件角色(Concrete Com

Head First 設計模式“ :模板方法模式

設計模式 模板方法模式 模板方法 模板方法模式 定義:模板方法模式在一個方法中定義一個算法的骨架,而將一些步驟延遲到子類中。模板方法使得子類可以在不改變算法結構的情況下,重新定義算法中的某些步驟。模板方法就是一個固定步驟的“算法”骨架方法。這個算法的可變部分通過繼承,在子類中重載實現。這樣就可以

一句話的事兒,Head first 設計模式

因此 實例 模板方法模式 抽象方法 class 包裝 作用 自己的 定義 head first 設計模式,是比較有趣的一本設計模式的書。 在學校裏看書和在工作時看書,意義是不一樣的。在學校時是為讀書而讀書,我們可以從0到1,我們有的是時間。但是工作後就不一樣。 我覺得這時的

閱讀Head First 設計模式之單例模式

    單例模式,顧名思義,就是一個類只能建立一個例項,並提供一個全域性訪問點。     該怎麼實現單例模式那?     第一步:在JAVA面向物件的語言中,要想建立一個例項物件,只需new

設計模式(參考《Head First 設計模式》)

設計模式(參考《Head First 設計模式》) 設計模式(Design Pattern)是一套被反覆使用、多數人知曉的、經過分類的、程式碼設計經驗的總結。 使用設計模式的目的:為了程式碼可重用性、讓程式碼更容易被他人理解、保證程式碼可靠性。 設計模式使程式碼編寫真正工程化;設計模式是

Head First設計模式(中文版)pdf下載

非常值得推薦的一本書,不僅僅是學習設計模式,也是在推薦你程式設計能力的鍛鍊。簡單易懂的例子,能讓你學到非常多的知識。需要學習的朋友可以通過網盤免費下載pdf版 (先點選普通下載-----再選擇普通使用者就能免費下載了)http://putpan.com/fs/0yiabe3ns2hu69f37/