閱讀 | 揭開設計模式的秘辛:設計模式 第1¾版
📖 揭開設計模式的秘辛:設計模式 第1¾版
《揭開設計模式的秘辛》作者John Vlissides,是軟體設計模式的創始GoF(Gang of Four)四位成員之一,我們現在在網路上學習的很多Design Pattern,都是出至於GoF的23個設計模式應用與延伸,是個大師級的人物。
▍ 為什麼想讀這本書?
如果是第一次聽到「Design Pattern」這名詞,那這本書就建議直接跳過了,這本書比較適合給專案中已經有在使用Design Pattern,並且思考如何進展到下一個階段,了解每個Pattern設計背後含意的人。
本書在於思考的昇華,還有介紹兩個不在23個模式中的Design Pattern,在第二章節還有一個較大型的設計範例,讓讀者不會只圍繞一個Design Pattern學習,而是用全部的Design Pattern去思考。
網路上對於Design Pattern的教學有很多,這裡想要分享的不是如何使用,而是著重在「對模式的十大誤解」與「有效率的模式編寫者的7個習慣」。
▍什麼是Design Pattern?
就我個人使用的經驗,之前最常用到的不外乎是單例模式 (Singleton)與工廠方法模式 (Factory Method Pattern),當然,Design Pattern有趣的地方就是,當你用對地方,他可以幫你解省非常多的時間。
所以,Design Pattern並不是直接用來完成程式碼的編寫,而是描述在各種不同情況下,要怎麼解決問題的一種「方案」。
如果你問為什麼要使用Design Pattern?我認為是為了建立一個方便維護及擴充的軟體系統。
而在學習Design Pattern前,除了要對Coding有一定的基礎外,像UML的應用與Class diagram也要有基本的認識,這樣你才有辦法看懂別人在描述的各種模式架構。
💡 Class diagram describes the structure of a system by showing the system's classes, their attributes, operations (or methods), and the relationships among objects.
▍對模式的十大誤解
書中第一章內容作者澄清對設計模式常見的十大誤解。
- 誤解1:模式就是再一種場合下,對某個問題的一個解決方案。
- 作者認為除了解決方案之外還要需要三樣東西。
- 再現 (Recurrence):解決方案不僅能夠解決當下的問題,也能夠應用再其他的問題上。
- 教學:學習如何解決方案,適應問題的變化。
- 正名:一個用來代表模式的名稱。
- 誤解2:模式只是行話、規則、程式設計技巧、資料結構.....
- 誤解3:看到冰山的一角,就等於看到了整座冰山。
- 避免以偏概全,不可以用少數例子就對模式下一個籠統的結論。
- 誤解4:模式需要工具或方法的支援才能生效。
- 模式的優點來自於對模式本身的應用,不需要任何形式的支援。
- 模式的四個主要優點:
- 設計模式提煉出專家的經驗和智慧,讓一般開發人員使用。
- 設計模式的名稱組成一個詞彙表,有助於開發人員交流順暢。
- 系統文件若記載了該系統所使用的模式,有助於人們更快理解系統。
- 對系統進行改造變得更容易,無論系統原來的設計是否採用了模式。
- 誤解5:模式可以保證軟體的耐用、更高的生產率....
- 模式是要開發人員軍火庫中其中一項武器。
- 誤解6:模式可以產生整體架構
- 模式與生產能力無關,使用者必須運用自己的創造力來填補各種模式之間的空白地帶。
- 誤解7:模式只用在物件導向設計或實作
- 模式是一種用來記錄和傳播專家經驗的工具,不會只有用在物件導向。
- 誤解8:沒有證據顯示模式對任何人有幫助
- 已經存在許多設計模式有益的結果。
- 誤解9:模式族群是一群由精英分子組成的小幫派
- 設計模式充滿多樣性,只要有心每個人都可以使用設計模式。
- 誤解10:模式族群是為自己服務的,甚至是不懷好意的。
▍有效率的模式編寫者的7個習慣
作者認為這7個習慣是在多年編寫模式的過程中養成的,而且多半是無意識養成的。認真培養並遵循這些習慣,必定會對於自己的模式編寫能力有很大的提升。
- 習慣1:經常反思
- 習慣2:堅持使用同一套結構
- 習慣3:盡早且頻繁地涉及具體問題
- 習慣4:保持模式間的區別和互補性
- 習慣5:有效地呈現
- 習慣6:不懈地重複
- 習慣7:收集並吸收迴響
模式是在某種場合下,對某個問題的一個解決方案的一種結構化展現。作者希望我們在寫Code之餘,要能再多花點時間紀錄開發歷程,不管是透過Blog或是任何形式,將累積的經驗逐漸紀錄下來。透過不斷的回顧反思,會讓你在累積技術的道路上提煉出更很多的智慧寶藏。
▍ 後記
如果以初學Design Pattern,個人蠻推薦看《深入淺出-設計模式》,這本書可以讓初學者透過書上的實作慢慢地去理解,去想像Pattern的使用時機,以漸進式的方法讓讀者知道每個Pattern使用時機。
而進階點可以參考《設計模式的解析與活用》,這本設計模式的解析與活用它會強調使用的時機,並且深入的解析Pattern的使用時機,還有帶領開發者們從Code的層面變成從Pattern的層面去設計。
Design Pattern使用的好,可以節省一個團隊很多未來的麻煩(技術債!!!),而模式的使用並不是絕對與唯一,模式背後的 OOP 原則如果就能夠精準且保有彈性的解決問題,未必要加入模式讓專案變得複雜。