重溫《深入淺出設計模式》心得整理 (Book Review of Head First Design Pattern, Summary)

2020-07-17

將近三週的時間,將近完成重溫進度的 90 %,在最後 Summary 各模式的回顧並且筆記書中所提及的 OOP 原則,並紀錄書中尚未詳細介紹的模式,留待之後繼續實踐。同時也謹記書中最後的提醒:設計模式作為一種在一般性的情境、目標與解決方案下所被發現的結構,模式的使用並不是絕對與唯一,模式背後的 OOP 原則如果就能夠精準且保有彈性的解決問題,未必要加入模式讓專案變得複雜。

之後的學習規劃不以模式本身為主,而是進入 MVC 的框架,從框架的原始碼中發現設計模式,用設計模式理解 MVC 框架,讓兩者相輔相成。

logo

模式回顧

策略模式

  • 原則:利用多型 (Polymorphism) 並以實踐介面 (Interface) 的方式來設計程式,這樣可以保持系統變動時候的彈性;將可以互換的行為封裝起來。
  • 實作:將程式碼抽取成介面,並以實作介面的方式開發;執行期的型別以介面為型別,發揮多型的效用。

📒 筆記回顧

工廠模式

  • 原則:由次類別決定要建立的 Concrete Class;允許客戶建立物件的家族、而無須指定他們的 Concrete Class。
  • 實作:將程式碼中生成物件的 if else 抽離成獨立類別,以專門的類別負責條件式生成物件。

📒 筆記回顧

裝飾者模式

  • 原則:將物件包裝起來提供新的行為。
  • 實作:裝飾者與被裝飾者實踐共同的介面;裝飾者使用合成的方式包含被裝飾者。

📒 筆記回顧

命令模式

  • 原則:將請求封裝成為物件。
  • 實作:Invoker 利用合成的方式擁有實作命令介面的類別集合,負責佇列與執行命令;命令類別利用合成的方式擁有 Receiver 為真正的邏輯演算法的執行者;Client 是負責初始化命令以及組裝 Receiver。

📒 筆記回顧

合成模式

  • 原則:令客戶面對個別物件與物件的集合時仍夠採取一致的處理方式。
  • 實作:葉衍生類別與子集合衍生類別實踐共同介面;子衍生集合類別利用合成的方式指向孫衍生類別。

📒 筆記回顧

反覆器模式

  • 原則:令物件在集合之中走訪時,不需要顯示其演算邏輯。
  • 實作:ICollection 介面與 IIterator 介面,Client 同時擁有兩者,並呼叫 IIterator 的公有方法; ICollection 的衍生類別要回傳實作 IIterator 的物件。

📒 筆記回顧

外觀模式

  • 原則:提供一個簡化一群類別的操作方式的介面。
  • 實作:利用合成的方式,將一群類別的調用方式包裝在表象類別中,提供精簡的方法供外界使用。

📒 筆記回顧

狀態模式

  • 原則:封裝以狀態為基礎的行為,並依據狀態的不同多型地使用行為方法。
  • 實作:狀態作為一種類別,實踐它的衍生類別實踐介面的方法。Client 在狀態轉換上,多型地使用衍生類別的方法。

📒 筆記回顧

轉接器模式

  • 原則:將物件封裝以相容其他介面。
  • 實作:將要轉接的對象 (target) 作為介面 (Interface) ,衍生類別 (adapter) 實踐此介面,並且合成一個要被轉型的類別 (adaptee)

📒 筆記回顧

樣板方法模式

  • 原則:由衍生類別決定如何實踐演算法中的步驟。
  • 實作:抽象化類別中相似的演算步驟為抽象類別,並令衍生類別繼承及實作抽象類別。

📕 筆記回顧

代理人模式

  • 原則:將物件包裝起來,用以控制對物件的存取。
  • 實作:

📕 筆記回顧

單體模式

  • 原則:將物件包裝起來,用以控制對物件的存取。
  • 實作:

📕 筆記回顧

HeadFirst 未提及的其他模式

  1. Brdige Pattern
  2. Builder Pattern
  3. Chain Of Responsibility Pattern
  4. Flyweight Pattern
  5. Interpreter Pattern
  6. Mediator Pattern
  7. Memento Pattern
  8. Prototype Pattern
  9. Visitor Pattern

模式的分類

生成 Generate

  1. Singleton
  2. Builder
  3. Abstract Factory
  4. Factory Method
  5. Prototype

行為 Behavior

  1. Mediator
  2. Visitor
  3. Template Method
  4. Interpreter
  5. Chain of Responsibility
  6. Stable
  7. Strategy
  8. State
  9. Iterator
  10. Memento
  11. Observer

結構 Structure

  1. Proxy
  2. Bridge
  3. Facade
  4. Composite
  5. Adapter
  6. Decorator
  7. Flyweight

OOP 原則

✔️將變動的部分封裝起來
✔️多用合成,少用繼承
✔️讓需要互動的物件之間的關係鬆綁
✔️類別應該對需求保持開放;應該對既有的程式碼修改保持關閉
✔️依賴抽象,不要依賴具象類別
✔️最小知識原則
✔️類別只有一個理由可以改變
✔️好萊塢守則,低階(具象)元件可以掛勾到系統上,但必須由高階(抽象)元件決定何時呼叫

參考資料