寒假用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的,但它一点都还没过时,仍然很值得一读的。

以上。