寫出可維護(hù)的代碼的一個最重要的方面就是在代碼中能夠注意到重復(fù)出現(xiàn)的主題并對其進(jìn)行優(yōu)化。設(shè)計模式的知識領(lǐng)域是無價的。
在本書的第一部分,我們將探索那些真正可以應(yīng)用于任何編程語言的設(shè)計模式的歷史和重要性。如果你已經(jīng)熟悉這段歷史,可以直接跳過"什么是模式?"這一章繼續(xù)閱讀。
設(shè)計模式可以追溯到早期的一名叫Christopher Alexander的建筑師。他經(jīng)常會發(fā)表一些他在處理設(shè)計問題時的經(jīng)驗和如何與建筑和城鎮(zhèn)相聯(lián)系的。有一天,當(dāng)Alexander使用了一次又一次后,他發(fā)現(xiàn)某些設(shè)計結(jié)構(gòu)會導(dǎo)致做出的效果是最好的。
在Sara Ishikawa和Murray Silverstein的協(xié)作下,Alexander發(fā)明了一種可以幫助授權(quán)任何人去設(shè)計和構(gòu)建希望的任何規(guī)模的模式語言。這在1977年的一篇名為"A Pattern Language"的論文中發(fā)表,在后來作為一本完整的精裝書發(fā)表。
大約30年前,軟件工程師開始將Alexander曾寫過的原理并入第一版的設(shè)計模式,這是一個用來對那些想要改善他們編碼技巧的新手開發(fā)者的一個指南。要注意,這時設(shè)計模式背后的概念實際上已經(jīng)在編程行業(yè)成立以來就有了,雖然不是那么正式的形式。
第一個也是最標(biāo)志性的關(guān)于軟件工程的設(shè)計模式的正式作品是在1995年一本叫Design Patterns: Elements Of Reusable Object-Oriented Software的書中發(fā)表,這是Erich Gamma, Richard Helm, Ralph Johnson和 John Vlissides - 一群被稱為Gang of Four(簡稱GoF)的人寫的。
GoF的出版物被認(rèn)為是非常有助于推動設(shè)計模式的概念在我們的領(lǐng)域發(fā)展的,因為它描述了大量的開發(fā)技術(shù)和缺陷,而且還有在今天的世界中大量使用的23個核心的面向?qū)ο蟮脑O(shè)計模式。我們將詳細(xì)地在"設(shè)計模式分類"這一章中介紹這些模式。
在本書中,我們將看到一些流行的JavaScript設(shè)計模式,并探索為什么一些特定的模式比其他的更適合你的項目。但請記住模式不僅僅可以應(yīng)用在單純的JavaScript (例如:標(biāo)準(zhǔn)JavaScript代碼)里,也可以在一些像jQuery或dojo的抽象庫里使用。在我們開始之前,讓我們看看模式在軟件設(shè)計中的確切定義。