‘從大處着眼,從小處着手’,之前對這句話只知其一;不知其二,自從踏出校門走入社會,開始工做以來,有了愈來愈深的理解,偶有發現這句話用在程序開發中也有用,因此,近段時間開始嘗試着分析jQuery源碼,分析angularjs源碼,學習設計模式。javascript
看過GOF的總結的23種設計模式的人,都或多或少的有種似曾相識的感受,事實確實如此,這些設計模式原來就有,是前人優秀的工做成果,只不過是GOF他們給這些本來就有的東西從新定義了一下,給予這些東西名稱和原理,使之更容易被人理解和接受,這自己就體現了GOF的偉大,讓好的東西更容易傳播。前端
在面向對象軟件設計過程當中針對特定問題的簡潔而優雅的解決方案。vue
設計模式也並非什麼洪水猛獸,遙不可及,一個有必定經驗的軟件開發者都會在不知不覺中使用它,這可能中間經歷了不少的嘗試,當他看過設計模式後,會發現原來已經有人對它進行過總結。java
使用設計模式實現的代碼,使用通常的方法都能實現,因此使用設計模式,會無形中增長代碼的量,尤爲是不正確的使用,更會帶來毀滅性的災難,因此,通常的開發人員惟恐避之不及。git
設計模式的實現都遵循一條原則‘找出程序中變化的地方,並將它封裝起來’。在程序設計中總分爲可變的地方和不可變的地方,可變的地方咱們每每將他封裝起來,不可變的地方也便是代碼穩定和不可變的部分的,每每這部分代碼是可複用的。這也是標題《可複用的面向對象軟件基礎》的由來。angularjs
好了,廢話很少說,下面進入常見的設計模式學習。github
有時侯咱們常常會遇到這樣的問題,許多設計模式的實現看起來幾乎如出一轍,好比:代理模式和裝飾者模式,策略模式和狀態模式。面試
你不只會大聲問,他們有什麼區別呢?設計模式
其實,從代碼結構上看並沒什麼區別,就像一把手槍,你拿它來殺人,它就是兇器,你拿它來救人它就是武器。跟你的用途有關係,其實最根本的是你的意圖。因此,在學習設計模式的時候,不要在在乎代碼的結構形式,要多留意模式的使用場景,在這種場景下解決了什麼問題,多進行對比(使用前,使用後有何差異)。瀏覽器
JavaScript從開始被人當成爲一種玩具語言,到後來發展爲一門流行的可靠的語言。人們從開發作一些簡單的交互,到後來Google作的第一個郵件系統,再到後來Google推出的angular框架的出現,js的威力在被人們認識的同時,伴隨着瀏覽器支持js作更多的東西,與此同時它也變得癰腫起來,框架間各類複雜的依賴甚至能讓你崩潰。隨着ES6, TypeScript, CoffeScript 等各類轉編譯語言的興起,無疑給前端開發者帶來了不小的學習壓力。像React,vue,angular這些當下流行的框架,你們都知道一些,可是要說有深刻研究,不見得有多少人。17年年末我發現各個公司的在招人時,對開發人員的要求愈來愈高,要知道這些框架的原理,要知道某些具體的功能如何實現,同時對於設計模式的考察也愈來愈突出。因此,基於開發語言的使用環境,以及工做面試須要,咱們不得不認真對待JavaScript常見的設計模式。
從前因爲使用的侷限性,和作的應用相對簡單,js不被重視,js就更談不上設計模式的問題。雖然,如今JavaScript被開發人員愈來愈重視,可是JavaScript設計模式的討論還不是那麼活躍,有研究和見地的仍是少數人,可是研究過源碼的同窗就會知道,在vue,angular種設計模式已經至關廣泛。
做爲一個勵志成爲前端小牛的我,如今也甚是心癢。
注:這是我我的對設計模式的認識和理解,僅表明我的觀點個見解,不足之處歡迎你們指正,隨着認識的加深這篇文章(包括設計模式其餘系列文章)會不斷地進行更新。
持續更新中...
其它設計模式相關文章請轉‘大處着眼,小處着手’——設計模式系列