當我閱讀《JavaScript設計模式與開發實踐》時,我在想些什麼

gblee發表於2018-03-02

寒假用angular和node開發了個人部落格網站。在過程中,學習了typescript,RxJs 和redux等等東西。最近又剛剛把《JavaScript設計模式與開發實踐》(一下簡稱《模式》)讀完。我喜歡在做做東西學學新知識後再去看書,在讀書的過程中思考自己剛剛實踐遇到過的困難或者是對一些技術困惑的地方,有時候因為書本的輔助作用,讓之前的一些困惑茅塞頓開。

當我閱讀《模式》時,我首先想到的是什麼是設計模式。我認為模式可以理解為形式,JavaScript設計模式可以理解為組織JavaScript程式碼以讓其實現某種特定需求的形式。正如手機又靜音,飛行,正常等等的模式可以切換,JavaScript設計模式也涉及到很多種(其實這裡需要指出的是設計模式其實是可以獨立於語言存在的,只是對於不同的語言,各種模式對應的實現方式有所差別並且各種模式的使用有所不同)。所以在程式設計過程中,我們使用的設計模式往往是多種模式混合使用,也就是各種設計模式往往不是互相排斥,而是互相補充或者獨立的。

此外,當我閱讀《模式》時,我還想到了ES6和typeScript。《模式》一書一開始上來就講解了關於JavaScript的面對物件,只是本書是基於ES5的,裡面的對於類,單體,私有變數和方法等等的實現還是有些複雜。這方面在ES6得到了極大的簡化。可以說ES6讓傳統的物件導向程式設計在JS中的實現更加容易。而說到物件導向的JS,我不禁想到了ts(typeScript),作為JS的超集,ts完全是以面對物件形式進行程式設計的,而且具備了型別檢驗。作為angular的首選語言,ts與angular的結合可以說是非常貼切。對於前端3大框架,很多人對於angular望而卻步,很大一部分原因是需要學習ts。其實作為JS超集,ts本身也是支援JS語法的。甚至可以再ts檔案中使用JS。因為接觸了面對物件程式設計方式之後,深刻體會到這種程式設計方式的好處,所以推薦大家可以嘗試一下angular這個框架。

《模式》一書涉及了很多種設計模式,單例,策略,代理,迭代,釋出-訂閱,命令,組合,責任鏈,裝飾者,狀態,介面卡等等模式。這裡我要拿出幾個說一說。首先是代理模式,自己最好的理解代理模式就是關於“翻牆”了,因為有自己搭建過梯子,瞭解了代理伺服器的概念,再借此類比代理模式可以說是非常恰當。接著是釋出-訂閱模式,釋出-訂閱模式可以說是在前端中經常使用到的,一個“click”事件就是一個釋出訂閱。當然,對我受益更多是理解RxJs。RxJs的應用場景與釋出訂閱模式的應用場景非常相似,可以說RxJs是對這種模式的工具化,當然,RxJs不僅限於此。接下來是責任鏈模式,相信用過jQuery的人都不陌生xx.xx.xx(""),這種程式設計風格。沒錯,這就是責任鏈模式的表現形式。最後是關於狀態模式,不知道你是否有狀態機這個概念。想想上學期自己學了關於VHDL的課程,狀態機是其中重要的程式設計形式。由此,我理解起狀態模式並不困難。所謂狀態模式,就是定義既定的若干種狀態(s1,s2,s3),然後物件只能在這些狀態中進行轉變(如:s1->s2->s3->s1,s3->s2->s1->s3)。其實JS有個工具包redux的核心思想也是狀態模式。有學習和了解過的應該可以體會到。

最後,再對《模式》本身簡單說說一下個人對這本書的看法。首先,我很喜歡這本書,雖然我不是第一次接觸設計模式,這也不是我看的第一本關於設計模式的書,但無疑的是,這本書裡面採用的例子在我開來都是非常生動形象而且非常貼切的。作者由淺入深,循循深入,理解起來非常輕鬆。雖然本書是關於ES5的,但它一點都還沒過時,仍然很值得一讀的。

以上。

相關文章