任何設計模式都只是工具
《設計模式》從誕生之日到現在,已經走過整整15年!每當觸及這本書,我就會想到一件事。1997年,我用非常巧妙的方法解決了一個程式上的難題,於是興沖沖地找到名滿Java界的大師Doug Lea,不無得意地向他“講解”我那“史無前例”的解決方案。哪知他只是淡淡一笑,告訴我這個方案在1995年出版的圖書《設計模式》中已有詳細描述,並被命名為“Decorator”模式。失望是無可避免的了,乘興而來,敗興而去,我開始讀這本書。然後我大為震驚,這本書裡到處都是妙不可言的想法,當然一些是我從不知道的,另一些是以前就瞭解的。更要為它叫好的是,這本書對每個模式都有詳細命名和定義,有了這樣一個統一的術語表,我們以後討論這些想法就容易得多了。
然後近些年來,設計模式在一些技術圈子裡遭到了不少非議。譬如Singleton模式,有人指責它增加了程式的耦合度,降低了軟體的可測試能力。我想你必須記住的是,任何設計模式都只是工具,而你作為程式設計師的職責,就是在自己的工作中正確使用這些工具。如果因為我們自己的職責缺位,在軟體設計中錯用、濫用設計模式,從而對程式造成傷害,那麼問題應該歸於自己,這並不是設計模式的錯,它本身的價值絲毫不能被降低。即便是遭受無數人的職責、聲名狼藉的Singleton模式,其實也有很多正確用法。
此外,你可能還聽到過一種觀點,認為設計模式的價值僅僅是用來彌補程式語言本身的缺陷,不過爾爾。我想我們是否更為寬容、正確的看法也許是:每個好的想法,都是在編寫程式的過程中慢慢出現的,而隨著時間的推移,這些想法逐步成熟、豐富,最後可以將設計模式融入到程式語言之中。
我在2001年說過,每個程式設計師都應該自己有一本《設計模式》,因為它提供了包含所有巧妙的設計模式的清單,並清晰對應了相應術語,可以方便我們討論問題。時至2009年的今天,我想這點沒有變化,未來亦是如此。Gamma、Helm、Johnson和已故的John Vlissides,這四位傑出的開拓者,改變了我們觀察和討論物件導向軟體的方法:他們的成果——《設計模式》,經受住了時間的考驗,是對軟體歷史的一個重大貢獻。
【本文轉自《程式設計師》2009年12月刊 特別專題:設計模式15年】
文/Joshua Bloch 譯/羅小平
作者簡介:Joshua Bloch,Google公司首席Java架構師,Jolt大獎獲得者。他曾是Sun公司的傑出工程師和Transarc公司的高階系統設計師。Bloch曾帶領團隊設計和實現過無數的Java平臺特性,包括JDK 5.0語言增強版和獲獎的Java Collections Framework。他的著作包括:《Effective Java》、《Java Puzzlers: Traps, Pitfalls, and Corner Cases》、《Java Concurrency in Practice》等。
【作者:劉偉 http://blog.csdn.net/lovelion】
相關文章
- 不需要程式設計的任何視覺化工具?程式設計視覺化
- 設計模式----工廠設計模式設計模式
- 設計模式-工廠設計模式設計模式
- Java設計模式——模板設計模式Java設計模式
- 設計模式---外觀設計模式設計模式
- [設計模式]單例設計模式設計模式單例
- 設計模式-裝飾設計模式設計模式
- 設計模式之單例設計模式設計模式單例
- 設計模式(四)Singleton設計模式設計模式
- PHP設計模式—建立型設計模式PHP設計模式
- 【設計模式】設計模式的分類設計模式
- 【設計模式】設計模式(一)-- 大話設計模式讀書筆記設計模式筆記
- 【設計模式】漢堡中的設計模式——策略模式設計模式
- 設計模式----代理模式設計模式
- 設計模式----中介模式設計模式
- 設計模式——策略模式設計模式
- 設計模式(策略模式)設計模式
- 設計模式-中介模式設計模式
- 設計模式-模板模式設計模式
- 設計模式——模板模式設計模式
- 設計模式——代理模式設計模式
- 設計模式-代理模式設計模式
- 設計模式-策略模式設計模式
- 設計模式~代理模式設計模式
- 【設計模式】代理模式設計模式
- 設計模式--命令模式設計模式
- 設計模式----Observer模式設計模式Server
- 設計模式🔫---策略模式設計模式
- JavaScript設計模式初探--單例設計模式JavaScript設計模式單例
- 設計模式總結 —— 單例設計模式設計模式單例
- 23種設計模式(二)---策略設計模式設計模式
- 23種設計模式(八)-原型設計模式設計模式原型
- 一.設計模式之工廠設計模式設計模式
- JavaScript設計模式之建立型設計模式JavaScript設計模式
- 通俗 Python 設計模式——原型設計模式Python設計模式原型
- 設計模式_JAVA動態代理設計模式設計模式Java
- Java設計模式(工廠方法設計模式)Java設計模式
- 《從設計到模式》——解讀設計模式設計模式