Pro JavaScript Design Patterns 笔记.part.1

笔记的存在,用来下一次记忆知识点时,可以快速地找到内容,而不至于再去翻整本书;以及加深记忆(避免看了等于白看)。

这些都是在书上画线标记了的。
这些都是在书上画线标记了的。
这些都是在书上画线标记了的。

重要的事情要说三遍。

此外注意:此系列中出现的术语都是《JavaScript高级程序设计》中出现的术语,例如此书中出现的一些不符的名词(例如将类型、甚至对象称为类)都将被更准确的类型、对象代替。

第一章 富有表现力的JavaScript

下面分割线里的区域没什么干货,只是随便纪录,请滚动到分割线之后。


只要你愿意,可以把程序写得很简单,也可以写得很复杂。(那你想简单点还是复杂点?)你可以采用函数式编程,也可以采用面向对象的编程风格。下面是摘录的几个实例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
// A function programing
function startAnimation () {}
function stopAnimation () {}

// B Anim Class
var Anim = function () {};
Anim.prototype.start = function () {};
Anim.prototype.stop = function () {};
// Usage
var myAnim = new Anim();
myAnim.start();
myAnim.stop();

// C Anim Class, with a slightly different syntax for declaring methods.
var Anim = function () {};
Anim.prototype = {
start : function () {},
stop : function () {}
};

// D Add a method to the Function object that can be used to declare methods
Function.prototype.method = function (method, fn) {
this.prototype[name] = fn;
};

var Anim = function () {};
Anim.method('start', function () {});
Anim.method('stop', function () {});

// E allows the calls to be chained.
Function.prototype.method = function (name, fn) {
this.prototype[name] = fn;
return this;
};
var Anim = function () {};
Anim.method('start', function () {}).method('stop', function () {});

玩法有很多,但是不要玩得别人看不懂就好。


分割线结束,开始正文。

在JavaScript中使用设计模式主要有如下三个原因:

  1. 可维护性。设计模式有助于降低模块间的耦合程度(耦合太紧的不叫设计 耦合太紧的不叫设计 耦合太紧的不叫设计)。这使对代码进行重构和换用不同的模块变得更容易,也使程序员在大型团队中的工具以及与其他程序员的合作变得更容易。
  2. 沟通。设计模式为处理不同类型的对象提供了一套通用的术语。程序员因此可以更简明地描述自己的系统的工作方式。你用不进行冗长的说明,往往这样一句就够了:“它使用了工厂模式”。每个模式都有自己的名称,这意味着你可以在较高层面上对其进行讨论,而不必涉足过多的细节。
  3. 性能。某些模式是起优化作用的,可以用来大幅提高程序的运行速度,并减少需要传送到客户端的代码量。这方面最重要的例子是享元模式和代理模式

你可能不使用设计模式的理由:

  1. 复杂性。获得可维护性往往要付出代价,那就是代码可能会变复杂、更难被程序设计新手理解。
  2. 性能。尽管某些模式能提升性能,但多数模式对代码的性能都有所拖累。这种拖累可能微不足道,也可能完全不能接受,这取决于项目的具体需求(以及应用场景)。

小结:
实现设计模式比较容易,而懂得应该在什么时候使用什么模式则较为困难。未搞懂设计模式的用途就盲目套用,是一种不安全的做法。你应该保证所选用的模式就是最恰当的那种,而且不要过度牺牲性能

JavaScript中的设计模式颇有助益,但其不当应用也会(势必)产生负面效果。在JavaScript这类轻灵的语言中,过度复杂的架构会很快把应用程序拖入泥沼。使用的编程风格和选择的设计模式应该与所要完成的工作相称。