任何設計模式都只是工具

Liuwei-Sunny發表於2013-09-26

       《設計模式》從誕生之日到現在,已經走過整整15年!每當觸及這本書,我就會想到一件事。1997年,我用非常巧妙的方法解決了一個程式上的難題,於是興沖沖地找到名滿Java界的大師Doug Lea,不無得意地向他“講解”我那“史無前例”的解決方案。哪知他只是淡淡一笑,告訴我這個方案在1995年出版的圖書《設計模式》中已有詳細描述,並被命名為“Decorator”模式。失望是無可避免的了,乘興而來,敗興而去,我開始讀這本書。然後我大為震驚,這本書裡到處都是妙不可言的想法,當然一些是我從不知道的,另一些是以前就瞭解的。更要為它叫好的是,這本書對每個模式都有詳細命名和定義,有了這樣一個統一的術語表,我們以後討論這些想法就容易得多了

       然後近些年來,設計模式在一些技術圈子裡遭到了不少非議。譬如Singleton模式,有人指責它增加了程式的耦合度,降低了軟體的可測試能力。我想你必須記住的是,任何設計模式都只是工具,而你作為程式設計師的職責,就是在自己的工作中正確使用這些工具。如果因為我們自己的職責缺位,在軟體設計中錯用、濫用設計模式,從而對程式造成傷害,那麼問題應該歸於自己,這並不是設計模式的錯,它本身的價值絲毫不能被降低。即便是遭受無數人的職責、聲名狼藉的Singleton模式,其實也有很多正確用法。

       此外,你可能還聽到過一種觀點,認為設計模式的價值僅僅是用來彌補程式語言本身的缺陷,不過爾爾。我想我們是否更為寬容、正確的看法也許是:每個好的想法,都是在編寫程式的過程中慢慢出現的,而隨著時間的推移,這些想法逐步成熟、豐富,最後可以將設計模式融入到程式語言之中。

       我在2001年說過,每個程式設計師都應該自己有一本《設計模式》,因為它提供了包含所有巧妙的設計模式的清單,並清晰對應了相應術語,可以方便我們討論問題。時至2009年的今天,我想這點沒有變化,未來亦是如此。GammaHelmJohnson和已故的John Vlissides,這四位傑出的開拓者,改變了我們觀察和討論物件導向軟體的方法:他們的成果——《設計模式》,經受住了時間的考驗,是對軟體歷史的一個重大貢獻。

 

【本文轉自《程式設計師》2009年12月刊 特別專題:設計模式15年 

/Joshua Bloch  /羅小平

 

 

作者簡介:Joshua BlochGoogle公司首席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

相關文章