學習設計模式的捷徑
(c) 2009 張恂 www.zhangxun.com
本文的最新版在《大道至簡:實話設計模式》:http://www.zhangxun.com/entry.aspx?sname=GoFpatterns
理解、掌握設計模式真有那麼難嗎?我們這個世界存在著簡單的科學真理,複雜的設計模式表象背後自然也存在簡單的客觀現實。學習和掌握設計模式有沒有什麼技巧、竅門和捷徑呢?有。
1、比較法
我最喜歡用、極力向大家推薦的第一種科學學習方法是比較法。在 23 個 GoF 設計模式中,有不少模式存在著相似性,在使用時很容易混淆。通過認真細緻的比較,我們不但可以發現一組彼此相似或相關的設計模式之間的真正差異點,而且還可以用一組、一批模式整體學習的方式取代(或彌補)逐個模式孤立學習記憶的方式,從而起到加深記憶、提高學習效率、促進準確運用的效果。
2、圖形建模法
我最喜歡用、極力向大家推薦的第二種科學方法是圖形建模法(用 UML 記憶、思考和分析設計模式)。學習設計模式切忌死記硬背。最好做到只要一聽到某個設計模式的名稱,就能迅速在自己的大腦中,投射或浮現出這個設計模式的 UML 標準靜態圖(如類圖)和動態圖(如序列圖、通訊圖、狀態圖等等),這遠比直接投射或浮現出一行行的高階程式設計語言原始碼要藝術、敏捷和高效得多。
有經驗的 OO 程式設計師知道,設計模式的抽象層次要比具體的 OO 程式語言高一層,用圖形化的抽象建模語言來描述設計模式,最簡單,也最形象。同一個設計模式,既可以用 Java、C#、VB.NET 實現,也可以用 Delphi、C++、Ruby 或 JavaScript. 等其他各類 OO 程式語言實現。所以,企圖通過死記硬背程式原始碼來記憶設計模式的方式,不但讓我們很難看到(或分析、比較)設計模式的本質特徵,而且也是非常低效和錯誤的。
3、比喻法
第三種最常用的設計模式學習方法是比喻法,或叫比擬法、類比法。我們常常可以把設計模式同現實世界中某一個或某一些為人所熟悉的形象比喻聯絡起來,以便領會和掌握它們的基本結構和特點,加深對模式的記憶和理解。事實上,很多設計模式的名稱原本就是一種比喻或對現實世界的模擬,例如,抽象工廠、橋、職責鏈、中介、訪問者等等。熟練地運用比喻法可以產生這樣的效果,一聽到某個設計模式的名稱,腦子裡就能馬上聯想到它的比喻,進而浮現出它的結構圖(UML 圖形)。
Software is virtual reality(張恂)。比喻法之所以簡單而有效,根本原因是因為軟體設計活動本質上就是一種建模活動,而且由於我們是人類,我們總是會自覺不自覺地在軟體程式中模擬、效仿現實世界中自己所熟悉的各種物質、概念及其運動規律。
通過打比方、比喻、類比,乃至用說俏皮話、調侃和無厘頭的方式來學習設計模式,可能是一種不錯的學習方式,能夠寓教於樂,收到奇效。然而,運用比喻法需要注意的一個問題是:不要濫用比喻。為某個設計模式找到一個非常貼切、形象的比喻並非一件易事。現有很多設計模式比喻的問題是不像,沒有抓住模式的基本特徵(我也不一定能做得更好)。此外在拿設計模式與現實世界、人類社會作類比的時候,最好也不要扯得太遠,以簡明為宜。
4、重視 OOD 原則和方法
第四,我認為最重要的也是被許多人所忽視的一個學習要領是:
通用的原則與方法高於具體的模式和做法(General Principles and Methods over Concrete Patterns and Practices)
有沒有什麼東西比設計模式更重要?有!滿腦子只有設計模式是不對的,其實這個世界上比設計模式更重要、更高階的事物還有很多,比方,設計原則和方法,尤其是 OOD 原則和方法,抽象、普適的原則和方法比具體、個別的模式、做法和解法更重要,其實所有的設計模式都是根據某種或某些軟體設計的基本思想、原則和方法而創造出來的。
相關文章:
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/13633641/viewspace-563314/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 學習Linux是存在捷徑的Linux
- iOS開發捷徑學習(三)iOS
- PyCharm pro在工作時的學習捷徑PyCharm
- 程式設計沒有捷徑:奇葩冒牌程式設計師的故事程式設計師
- 設計模式(一)學習設計模式的好處設計模式
- 設計模式學習設計模式
- Java學習之路:不走彎路,就是捷徑Java
- 學習人工智慧不走捷徑,走大道的方式人工智慧
- 設計模式學習——代理模式設計模式
- AI 開發的捷徑:工作流模式AI模式
- Java學習之路:不走彎路,就是捷徑(轉)Java
- [譯]通往 Java 函數語言程式設計的捷徑Java函數程式設計
- Java設計模式學習Java設計模式
- MapReduce設計模式學習設計模式
- FSM 設計模式學習設計模式
- 設計模式-建立型模式學習設計模式
- 設計模式學習-物件池模式設計模式物件
- 設計模式學習-物件模板模式設計模式物件
- 設計模式學習-原型模式設計模式原型
- 設計模式學習-單例模式設計模式單例
- 設計模式學習-建造者模式設計模式
- 設計模式學習-工廠模式設計模式
- 學習設計模式的筆錄設計模式
- 關於設計模式的學習設計模式
- 設計模式的最佳學習方法設計模式
- 有關設計模式的學習設計模式
- 設計模式學習-設計原則設計模式
- 快速學Python,走個捷徑~Python
- 設計模式快速學習(八)委派模式設計模式
- 設計模式快速學習(七)策略模式設計模式
- 設計模式快速學習(六)模板模式設計模式
- 設計模式學習之單例模式設計模式單例
- 學習筆記-設計模式:MVC模式筆記設計模式MVC
- 設計模式學習(十八)中介者模式設計模式
- 區塊鏈: 暴富的捷徑與程式設計師的舞臺區塊鏈程式設計師
- 設計模式學習筆記設計模式筆記
- 學習筆記-設計模式筆記設計模式
- Java設計模式學習二Java設計模式