要想深入理解設計模式,就必須究其細節
15年前,設計模式的經典之作《設計模式》出版之際,我在其封底寫下了這樣的評論:“這本書是對物件設計和開發實踐者的重大貢獻!你可有過為自己某個想法的命名冥思苦想的經歷?這事的確令人苦惱。《設計模式》解決了這個問題,它歸納並組織了物件設計、建立和使用領域中已被證明行之有效的各種思想,組織出了一個清晰的目錄。它對這些設計思想的規範命名,為團隊成員使用相同術語高效溝通創造了條件。”
我為這本書做出版預審時,曾建議Addison-Wesley考慮以活頁形式出版這本書,以方便將來更新或增加內容。現在回想起來,這個建議非常幼稚,我居然希望將所有的設計模式都規規矩矩塞進一本冊子!而這本書的四位作者,運用高度的抽象智慧,將眾多模式歸納為23種:迄今為止,所有設計模式都未能逃離這個範疇!
在過去15年,我將《設計模式》指定為我的物件設計課的教科書,要求學生們將這本書放到自己的專業圖書架上。在課程中,大家每讀到一個模式,都要學習、討論,並將自己的想法分享給其他人。我希望學生們能真正理解這些模式的含義,並找到它們在解決自己實際工作中遇到的設計問題的潛在作用。要求學生們思考自己在什麼地方用到過這個模式,是否曾用其他的替代方法達到了同樣的設計目的。我努力讓我的學生們相信:要想真正深入理解一個設計模式,就必須探究其細節,並根據自己過去的經驗和當前設計需要,考慮清楚如何具體應用這個模式。比如Composite模式,最開始是依靠類來實現的——這本書寫作時,大規模使用介面的語言還沒出現。但時至今日,沒有問題,Composite仍然是一個有效的設計思想,只不過你有了更多的具體實現辦法。我想努力讓學生們明白,這本書是為那些真正喜歡思考,而不是隻想盲目地貼上複製程式碼的人準備的。同時,思想需要實踐的檢驗,並需根據時代和你使用的程式語言、框架作出正確選擇。
面世15年後,《設計模式》對今天的軟體開發者仍有很大的吸引力。今年夏天,我在網上說我有幾本《設計模式》可以送人,幾小時內被一搶而空。這就是社會媒體的威力!不過可能更能解釋其原因的是這些設計模式本身。我珍藏了那些現在還津津樂道自己擁有這本經典的人發給我的郵件。
【本文轉自《程式設計師》2009年12月刊 特別專題:設計模式15年】
文/Rebecca Wirfs-Brock 譯/羅小平
作者簡介:Rebecca Wirfs-Brock,物件技術大師,物件導向設計技術的先驅,職責驅動設計(Responsibility-Driven Design, RDD)方法創始人。她在1990年出版的”Designing Object-Oriented Software”是最早的物件導向設計書籍之一(該書中譯本《物件導向軟體設計經典》已於2003年9月由電子工業出版社出版),書中清晰闡述了“類”、“職責”、“協作”這些我們今天耳熟能詳的概念,提出職責驅動設計的方法。她在Object Design: Roles, Responsibilities, and Collaborations (Addison Wesley - November, 2002)【物件設計:角色、職責和協作】一書中很好地融合了其對CRC卡、協作(Collaborations)和靈活性(Flexibility)這些主題的見解。
【作者:劉偉 http://blog.csdn.net/lovelion】
相關文章
- 要想深入理解mysql索引?這16個點你必須要了解!MySql索引
- MVC設計模式深入理解MVC設計模式
- 深入理解Plasma(二)Plasma 細節ASM
- 前端工程師必須掌握的設計模式前端工程師設計模式
- java 23種設計模式 深入理解Java設計模式
- 遊戲設計師必須真正理解玩家的反饋遊戲設計師
- 年輕人必須理解的
- 深入理解移動端適配與探究其解決方案
- 開發 web 桌面類程式幾個必須關注的細節Web
- 理解設計模式設計模式
- 設計模式理解設計模式
- Java註解在Android中必須學習的細節知識JavaAndroid
- 深入理解Moya設計
- 十大必須知道的Kubernetes設計模式 - Bilgin Ibryam設計模式
- 要想做好自媒體 你必須掌握的八大工具
- UI設計細節及技巧UI
- 關於Linux Shell的訊號trap功能你必須知道的細節Linux
- 程式設計師必須走向專業化程式設計師
- 細品 javascript 設計模式(策略模式)JavaScript設計模式
- Web設計師必須掌握的六大設計策略Web
- 為什麼學好計算機就必須學好彙編?計算機
- Path for iOS設計細節賞析iOS
- 深入理解代理模式模式
- 設計模式個人理解(一)設計模式
- shell程式設計必須要掌握的命令-xargs程式設計
- @程式設計師,安全問題必須重視!程式設計師
- 程式設計師必須要了解的web安全程式設計師Web
- 程式設計師必須掌握哪些演算法?程式設計師演算法
- 死磕java concurrent包系列(二)基於ReentrantLock理解AQS同步佇列的細節和設計模式JavaReentrantLockAQS佇列設計模式
- React Hooks 深入系列 —— 設計模式ReactHook設計模式
- 程式設計師必須克服的十大程式設計禁忌程式設計師
- 深入理解模組化程式設計程式設計
- 理解設計模式之單例模式(Javascript)設計模式單例JavaScript
- 學習 Laravel 必須理解的知識點Laravel
- 生活細節如何影響遊戲設計?遊戲設計
- YYImage 設計思路,實現細節剖析
- 那些害死程式設計師的細節程式設計師
- 深入理解工廠模式模式