1. 程式人生 > >Head First設計模式讀書筆記

Head First設計模式讀書筆記

    設計原則:

  1. 找出應用中可能需要變化之處,把它們獨立出來,不要和那些不需要變化的程式碼混在一起。
  2. 針對介面程式設計,而不是針對實現程式設計。
  3. 多用組合,少用繼承。 
  4. 為了互動物件之間的鬆耦合設計而努力。
  5. 類應該對拓展開放,對修改關閉。
  6. 依賴倒置原則:要依賴抽象,不要依賴具體類。不能讓高層元件依賴於底層元件。(變數不可以持有具體類的引用)
  7. 最少知識原則:只和你的密友談話。
  8. 好萊塢原則:別調用我們,我們會呼叫你。(高層元件對底層元件)
  9. 單一責任:一個類應該只有一個引起變化的原因。

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

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

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

    工廠方法模式:定義了一個建立物件的介面(父類抽象方法),但由子類決定要例項化的類是哪一個(子類實現抽象方法),工廠方法讓類把例項化推遲到子類。(繼承)

    抽象工廠模式:定義一個介面,用於建立相關或依賴物件的家族,而不需要明確指定具體類(解耦)。(抽象工廠的每個方法看起來想工廠方法)(物件組合)

    單例模式:確保一個類只有一個例項,並提供一個全域性訪問點。(延遲初始化、同步、靜態變數初始化、雙重檢查加鎖volatile)靜態私有變數 、靜態共有方法、私有構造器

    命令模式:將“請求”封裝成物件,以便使用不同的請求、物件或者日誌來引數化其他物件。命令模式也支援可撤銷的操作。(客戶→呼叫者(通過setcommand設定不同的命令,持有一個命令物件)→命令物件(定義了接受者和動作之間的繫結關係,execute呼叫不同接受者執行請求)→接受者)

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

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

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

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

    狀態模式:允許物件在內部狀態改變時改變它的行為,物件看起來好像修改了它的類。

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

裝飾者、介面卡模式、外觀模式的比較:裝飾者不改變介面,但加入新的責任;介面卡將一個介面轉換成另一個介面;外觀讓介面更簡單。

策略、模版方法、命令:策略、命令用組合的方式,模版繼承;策略用不同的演算法做相同的事,演算法之間可以相互替換。命令做不同的事,而且有一個接受者。模版方法定義演算法骨架,在子類中定義某些步驟。

策略、狀態模式的比較。裝飾器、介面卡、代理模式的比較。

相關推薦

Head First設計模式讀書筆記八 第九章下 組合模式

組合模式+迭代器模式 接著上一節最後的例子,例子的最終list結構圖是這樣的: 若要給DinerMenu新加一種Menu(即下面這樣),則需要對現有結構進行較大改動。 可以看到,目前的結構中分為兩種結構,一種是menu,是一種容器,可以包含選單項,而第二種

Head First設計模式讀書筆記九 第十章 狀態模式

狀態模式例項 用Java設計糖果機吧 大致流程: 上圖中,有四種狀態:沒有硬幣,有硬幣,準備售出狀態以及糖果售罄狀態。而控制糖果機狀態轉換的則是各種動作(Action),這些動作分別是投入硬幣,超時判斷,轉動曲柄,判斷糖果決定是否售出。 GumballMac

Head First 設計模式讀書筆記——策略模式

最近研究了一些優秀的開源框架,學習了很多開源框架中自己不熟悉的知識,發現一些優秀的開源框架都或多或少的使用了設計模式,正好為了能分析原始碼不那麼頭疼乾脆先複習一下以前只看過的設計模式,於是我翻出了壓箱底的head first 設計模式,這本書圖文並茂,就是廢話很多不過它完全順

Head First設計模式讀書筆記

    設計原則:找出應用中可能需要變化之處,把它們獨立出來,不要和那些不需要變化的程式碼混在一起。針對介面程式設計,而不是針對實現程式設計。多用組合,少用繼承。 為了互動物件之間的鬆耦合設計而努力。類應該對拓展開放,對修改關閉。依賴倒置原則:要依賴抽象,不要依賴具體類。不能

Head First 設計模式讀書筆記

public class DuckTest {     public static void main(String[] args) {         MallardDuck duck = new MallardDuck();         duck.setFlyBehavior(new FlyWithW

Head First 設計模式 讀書筆記

1、 使用模式最好的方式:把模式裝進腦子中,然後在你的設計中和已有的應用中,尋找何處可以使用這些模式。2、 對程式碼所做的區域性修改,影響層面不只是區域性(會飛的橡皮鴨子)。3、 當涉及“維護”時,為了“複用”目的而使用繼承,結局並不完美。4、 不變的是變化。5、 設計原則一

Head First 設計模式筆記10

代理模式(Proxy) 為另一個物件提供一個替身或佔位符以控制對這個物件的訪問。 栗子 還記得上一個筆記中的糖果機吧,現在產品經理想要一份寫著糖果機位置、庫存和當前的狀態報告。 是不是挺簡單的?趕緊寫程式碼。 糖果機加上位置資訊: class

Head First 設計模式筆記9

狀態模式(State) 允許物件在內部狀態改變時改變它的行為,物件看起來好像修改了它的類。 栗子 現在有一臺糖果機,它的狀態(挺複雜的): - 沒有 25 分錢 -> 投入 25 分錢 -> 有 25 分錢 - 有 25 分錢 ->

Head First設計模式學習筆記-------(12)狀態模式

我們今天開門見山吧,我們又接到了一個新的專案,讓我們看看這次的專案是什麼吧 對於大家學了熟練的開發技巧,看到這麼一個專案,是不是內心第一個想法就是------真TM簡單。 public class GumballMachine { final static int

Head First 設計模式筆記2

觀察者模式(Observer) 定義了物件之間的一對多依賴,當一個物件改變狀態時,它的所有依賴者都會收到通知並自動更新。 初識 我們先來了解一下報紙和雜誌的訂閱是怎麼回事: 1. 報社的業務就是出版報紙、雜誌等各種出版物。 2. 如果我想看報社的

Head First 設計模式筆記

第一章 策略模式 00設計原則:找出應用中可能需要變化之處,把它們獨立出來,不要和那些不需要變化的程式碼放在一起。 把會變化的部分取出並封裝起來,好讓其它部分不會受到影響。結果如何?程式碼變化引起的不經意後果變少,系統變得更有彈性。 00設計原則:針對介面程式設計,而不是針對實現程式設計。 “針對介面程式設計

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

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

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

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

Head.First設計模式》的學習筆記(11)--模板方法模式

意圖:在一個方法中定義一個演算法的骨架,而將一些步驟延遲到子類中。模板方法使得子類可以在不改變演算法結構的情況下,重新定義演算法中的某些步驟。 結構:   其中AbstractClass 實現為: public abstract class AbstractClass {

Head First設計模式筆記

一、設計原則 1、找到應用中可能需要變化之處,把它們獨立出來,不要和不需要變化的程式碼混在一起 把會變化的部分取出並“封裝”起來,好讓其他部分不會受到影響。 2、針對介面程式設計,而不是針對實現程式設計 3、多用組合,少用繼承 4、為了互動物件之間的鬆耦合設計而

Head first設計模式》學習筆記

抽象工廠模式提供一個介面,用於建立相關或依賴物件的家族,而不需要明確指定具體類。 確保原料的一致 披薩店成功的關鍵在於新鮮、高質量的原料。要如何確保每家加盟店使用高質量的原料?你打算建造一家生成原料的工廠,並將原料運送到各家加盟店。對於這個做法,現在還剩下一個問題:加

Head.First設計模式》的學習筆記(15)--代理模式

 意圖: 為另一個物件提供一個替身或佔位符得以訪問這個物件。 結構: 接著我們來看RMI遠端代理: 1.我們先在伺服器註冊好幾個糖果機,由於我們現在使用RMI,我們需要構造糖果機和狀態。 糖果機首先變成一個服務,我們為糖果機建立一個遠端介面,讓開介面提供了一組可以遠端

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 一、定義 定義:為其他對象提供一種代理以控制對這個對象的訪問 在代理模式中,我們創建具有現有對象的對象,以便向外界提供功能接口。 二、結構 代理模式一般會有三個角