HeadFirst設計模式 讀書筆記3

適配器模式與外觀模式:以不同的目的,包裝某些對象,讓它們的接口看起來不像自己而像是別的東西。
    這樣就可以在設計中,將類的接口轉換成想要的接口。
    適配器模式解析
       客戶 - 適配器 - 被適配器
       客戶使用適配器的過程如下:
          客戶通過目標接口調用適配器的方法對適配器發出請求。
          適配器使用被適配者接口把請求轉換成被是配置的一個或多個調用接口。
          客戶接收到調用的結果,但並未察覺這一切是適配器在起轉換作用。
    適配器模式
       將一個類的接口,轉換成客戶期望的另一個接口。適配器讓原本接口不兼容的類可以合作無間。

      
外觀不只是簡化了接口,也將客戶從組件的子系統中解耦。  
  
     外觀和適配器可以包裝許多類,但是外觀的意圖是簡化接口,而適配器的意圖是將接口轉換成不同接口。
    外觀模式
       提供了一個統一的接口,用來訪問子系統中的一羣接口。外觀定義了一個高層接口,讓子系統更容易使用。
   
設計原則:最少知識原則:只和你的密友談話。
    要點
       當需要使用一個現有的類而其接口並不符合你的需要時,就使用適配器。
       當需要簡化並統一一個很大的接口或者一羣發雜的接口時,使用外觀。
       適配器改變接口以符合客戶的期望。
       外觀將客戶從一個複雜的子系統中解耦。
       實現一個適配器可能需要一番功夫,也可能不費功夫,視目標接口的大小與複雜度而定。
       實現一個外觀,需要將子系統組合進外觀中,然後將工作委託給子系統執行。
       適配器模式有兩種形式:對象適配器和類適配器,類適配器需要用到多重繼承。
       你可以爲一個子系統實現一個以上的外觀。
       適配器將一個對象包裝起來以改變其接口,裝飾者將一個對象包裝起來以增加新的行爲和責任,而外觀將一羣對象包裝起來以簡化其接口。

唉!在需要進入這個洞之前他原本是個好老闆的,結果這全部都編程了我的工作了。你懂我的意思吧?他根本就不見人影!
    我們將要深入封裝算法塊,好讓子類可以在任何時候都可以將自己掛接進運算裏。
    模板方法定義了一個算法的步驟,並允許子類爲一個或多個步驟提供實現。
    模板方法模式
       在一個方法中定義一個算法的骨架,而將一些步驟延遲到子類中。模板方法使得子類可以在不改變算法結構的情況下,重新定義算法中的某些步驟。
   
設計原則:好萊塢原則:別調用(打電話給)我們,我們會調用(打電話)你。
       高層組件對待低層組件的方式是:別調用我們,我們會調用你。
    要點:
       模板方法定義了算法的步驟,把這些步驟的實現延遲到子類。
       模板方法模式爲我們提供了一種代碼複用的重要技巧。
       模板方法的抽象類可以定義具體方法、抽象方法和鉤子。
       抽象方法由子類實現。
       鉤子是一種方法,它在抽象類中不做事,子類可以選擇要不要去覆蓋它。
       爲了防止子類改變模板方法中的算法,可以將模板方法聲明爲final。
       好萊塢原則告訴我們,將決策權放在高層模塊中,以便決定如何已經何時調用低層模塊。
       你將在真實世界代碼中看到模塊方法模式的許多變體,不要期待它們全都是一眼就被你認出來的。
       策略模式和模板方法模式都封裝算法,一個用組合,一個用繼承。
       工廠方法是模板方法的一種特殊版本。

良好管理的集合 “當然我把集合都好好地封裝起來了”
    我們能學習如何讓客戶遍歷你的對象而又無法窺視你存儲對象的方式;也將學習如何創建一些對象超集合,能夠一口氣就跳過某些讓人望而生畏的數據結構;還將學寫到一些關於對象職責的知識。
    迭代器模式
       提供一種方法順序訪問一個聚合對象中的各個元素,而不是暴露其內部的表示。
   
迭代器模式讓我們能遊走於聚合內的每一個元素,而不是暴露其內部的表示。
    把遊走的任務放在迭代器上,而不是聚合上。這樣簡化了聚合的接口和實現,也讓責任各得其所。
    設計原則:一個類應該只有一個引起變化的原因。
    類的每個責任都有改變的潛在區域。超過一個責任,意味着超過一個改變的區域。
    這個原則告訴我們,儘量讓每個類保持單一責任。
    組合模式
       允許你將對象組合成樹形結構來表現“整體/部分”層次結構。組合能讓客戶以一直的方式處理個別對象以及對象組合。
   
組合模式讓我們能用樹形方式創建對象的結構,樹裏面包含了組合以及個別的對象。
    使用組合結構,我們能把相同的操作應用在組合和個別對象上。換句話說,在大多數情況下,我們可以忽略對象組合和個別對象之間的差別。
    空迭代器
       NullIterator,返回一個迭代器,而這個迭代器得hasNext永遠返回false。
    要點
       迭代器允許訪問聚合的元素,而不需要暴露它的內部結構。
       迭代器將遍歷聚合的工作封裝進一個對象中。
       當使用迭代器的時候,我們依賴聚合提供遍歷。
       迭代器提供了一個通用的接口,讓我們遍歷聚合的項,當我們編碼使用聚合的項時,就可以使用多態機制。
       我們應該努力讓一個類只分配一個責任。
       組合模式提供一個結構,可同時包容個別對象和組合對象。
       組合模式允許客戶對個別對象以及組合對象一視同仁。
       組合結構內的任意對象稱爲組件,組件可以是組合,也可以是葉節點。
       在實現組合模式時,有許多設計上的折中。你要根據需要平衡透明性和安全性。
      


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章