# 簡介
寫出可維護的代碼的一個最重要的方面就是在代碼中能夠注意到重復出現的主題并對其進行優化。設計模式的知識領域是無價的。
在本書的第一部分,我們將探索那些真正可以應用于任何編程語言的設計模式的歷史和重要性。如果你已經熟悉這段歷史,可以直接跳過"[什么是模式?](http://www.oschina.net/translate/learning-javascript-design-patterns#whatisapattern)"這一章繼續閱讀。
設計模式可以追溯到早期的一名叫[Christopher Alexander](http://en.wikipedia.org/wiki/Christopher_Alexander)的建筑師。他經常會發表一些他在處理設計問題時的經驗和如何與建筑和城鎮相聯系的。有一天,當Alexander使用了一次又一次后,他發現某些設計結構會導致做出的效果是最好的。
在Sara Ishikawa和Murray Silverstein的協作下,Alexander發明了一種可以幫助授權任何人去設計和構建希望的任何規模的模式語言。這在1977年的一篇名為"A Pattern Language"的論文中發表,在后來作為一本完整的[精裝書](http://www.amazon.co.uk/Pattern-Language-Buildings-Construction-Environmental/dp/0195019199/ref=sr_1_1?s=books&ie=UTF8&qid=1329440685&sr=1-1)發表。
大約30年前,軟件工程師開始將Alexander曾寫過的原理并入第一版的設計模式,這是一個用來對那些想要改善他們編碼技巧的新手開發者的一個指南。要注意,這時設計模式背后的概念實際上已經在編程行業成立以來就有了,雖然不是那么正式的形式。
第一個也是最標志性的關于軟件工程的設計模式的正式作品是在1995年一本叫*Design Patterns: Elements Of Reusable Object-Oriented Software*的書中發表,這是[Erich Gamma](http://en.wikipedia.org/wiki/Erich_Gamma),[?Richard Helm](http://en.wikipedia.org/w/index.php?title=Richard_Helm&action=edit&redlink=1),[?Ralph Johnson](http://en.wikipedia.org/wiki/Ralph_Johnson)和[?John Vlissides](http://en.wikipedia.org/wiki/John_Vlissides)?- 一群被稱為Gang of Four(簡稱GoF)的人寫的。
GoF的出版物被認為是非常有助于推動設計模式的概念在我們的領域發展的,因為它描述了大量的開發技術和缺陷,而且還有在今天的世界中大量使用的23個核心的面向對象的設計模式。我們將詳細地在"設計模式分類"這一章中介紹這些模式。
在本書中,我們將看到一些流行的JavaScript設計模式,并探索為什么一些特定的模式比其他的更適合你的項目。但請記住模式不僅僅可以應用在單純的JavaScript (例如:標準JavaScript代碼)里,也可以在一些像[jQuery](http://jquery.com/)或[dojo](http://dojotoolkit.org/)的抽象庫里使用。在我們開始之前,讓我們看看模式在軟件設計中的確切定義。
- 前言
- 簡介
- 什么是設計模式?
- 設計模式的結構
- 編寫設計模式
- 反模式
- 設計模式的分類
- 設計模式分類概覽表
- JavaScript 設計模式
- 構造器模式
- 模塊化模式
- 暴露模塊模式
- 單例模式
- 觀察者模式
- 中介者模式
- 原型模式
- 命令模式
- 外觀模式
- 工廠模式
- Mixin 模式
- 裝飾模式
- 亨元(Flyweight)模式
- JavaScript MV* 模式
- MVC 模式
- MVP 模式
- MVVM 模式
- 最新的模塊化 JavaScript 設計模式
- AMD
- CommonJS
- ES Harmony
- JQuery 中的設計模式
- 組合模式
- 適配器模式
- 外觀模式
- 觀察者模式
- 迭代器模式
- 惰性初始模式
- 代理模式
- 建造者模式
- jQuery 插件的設計模式
- JavaScript 命名空間模式
- 總結
- 參考