一、目录简介
第1章 介绍 1
第2章 什么是模式 3
我们每天都在使用模式 4
第3章 模式状态测试、Proto模式及三法则 6
第4章 设计模式的结构 8
第5章 编写设计模式 11
第6章 反模式 13
第7章 设计模式类别 15
第8章 设计模式分类 17
有关类(Class)的要点 17
第9章 JavaScript设计模式 20
9.1 Constructor(构造器)模式 21
9.1.1 对象创建 21
9.1.2 基本Constructor(构造器) 23
9.1.3 带原型的Constructor(构造器) 24
9.2 Module(模块)模式 25
9.2.1 对象字面量 25
9.2.2 Module(模块)模式 27
9.2.3 Module模式变化 31
9.3 RevealingModule(揭示模块)模式 36
9.3.1 优点 38
9.3.2 缺点 38
9.4 Singleton(单例)模式 38
9.5 Observer(观察者)模式 42
9.5.1 Observer(观察者)模式和Publish/Subscribe(发布/订阅)模式的区别 47
9.5.2 优点 49
9.5.3 缺点 49
9.5.4 Publish/Subscribe实现 49
9.6 Mediator(中介者)模式 59
9.6.1 基本实现 60
9.6.2 高级实现 61
9.6.3 示例 67
9.6.4 优点和缺点 68
9.6.5 中介者(Mediator)与观察者(Observer) 69
9.6.6 中介者(Mediator)与外观(Facade) 69
9.7 Prototype(原型)模式 70
9.8 Command(命令)模式 73
9.9 Facade(外观)模式 75
有关抽象的要点 78
9.10 Factory(工厂)模式 78
9.10.1 何时使用Factory模式 81
9.10.2 何时不应使用Factory模式 81
9.10.3 AbstractFactory(抽象工厂) 81
9.11 Mixin模式 82
9.11.1 子类化 83
9.11.2 Mixin(混入) 84
9.12 Decorator(装饰者)模式 88
9.12.1 伪经典Decorator(装饰者) 91
9.12.2 使用jQuery的装饰者 96
9.12.3 优点和缺点 97
9.13 Flyweight(享元)模式 98
9.13.1 使用Flyweight模式 98
9.13.2 Flyweight和共享数据 99
9.13.3 实现经典Flyweight(享元) 99
9.13.4 转换代码以使用Flyweight(享元)模式 103
9.13.5 基本工厂 105
9.13.6 管理外部状态 106
9.13.7 Flyweight(享元)模式和DOM 107
第10章 JavaScriptMV*模式 112
10.1 MVC 112
Smalltalk—80MVC 113
10.2 为JavaScript开发人员提供的MVC 114
10.2.1 Model(模型) 114
10.2.2 View(视图) 116
10.2.3 Controller(控制器) 119
10.2.4 Spine.js与Backbone.js 120
10.3 MVC为我们提供了什么 122
10.4 JavaScript中的Smalltalk—80MVC 122
10.4.1 深入挖掘 123
10.4.2 总结 123
10.5 MVP 124
10.5.1 Model、View和Presenter 124
10.5.2 MVP或MVC? 125
10.5.3 MVC、MVP和Backbone.js 126
10.6 MVVM 128
10.6.1 历史 129
10.6.2 Model 129
10.6.3 View 130
10.6.4 ViewModel 133
10.6.5 小结:View和ViewModel 135
10.6.6 小结:ViewModel和Model 135
10.7 利与弊 135
10.7.1 优点 135
10.7.2 缺点 136
10.8 使用更松散数据绑定的MVVM 136
10.9 MVC、MVP与MVVM 141
10.10 Backbone.js与KnockoutJS 142
第11章 模块化的JavaScript设计模式 144
11.1 脚本加载器要点 145
11.2 AMD 145
11.2.1 模块入门 146
11.2.2 使用Dojo的AMD模块 150
11.2.3 AMD模块设计模式(Dojo) 151
11.2.4 使用jQuery的AMD模块 152
11.2.5 AMD总结 155
11.3 CommonJS 155
11.3.1 入门指南 156
11.3.2 使用多个依赖 157
11.3.3 支持CommonJS的加载器和框架 158
11.3.4 CommonJS适用于浏览器吗? 158
11.3.5 延伸阅读 159
11.4 AMD和CommonJS:互相竞争,标准同效 159
UMD:用于插件的AMD和CommonJS兼容模块 160
11.5 ESHarmony 165
11.5.1 具有Imports和Exports的模块 166
11.5.2 从远程数据源加载的模块 167
11.5.3 模块加载器API 167
11.5.4 用于服务器的类CommonJS模块 168
11.5.5 具有构造函数、getter和setter的类 168
11.5.6 ESHarmony总结 169
11.5.7 延伸阅读 170
11.6 总结 170
第12章 jQuery中的设计模式 171
12.1 Composite(组合)模式 171
12.2 Adapter(适配器)模式 173
12.3 Facade(外观)模式 174
12.4 Observer(观察者)模式 177
12.5 Iterator(迭代器)模式 180
12.6 延迟初始化 181
12.7 Proxy(代理)模式 183
12.8 Builder(生成器)模式 184
第13章 jQuery插件设计模式 187
13.1 模式 188
13.2 LightweightStart模式 189
延伸阅读 191
13.3 完整的WidgetFactory模式 191
延伸阅读 194
13.4 嵌套命名空间插件模式 194
延伸阅读 196
13.5 自定义事件插件模式(使用WidgetFactory) 196
延伸阅读 198
13.6 使用DOM—to—ObjectBridge模式的原型继承 198
延伸阅读 200
13.7 jQuery UI Widget Factory Bridge模式 200
延伸阅读 203
13.8 使用WidgetFactory的jQuery Mobile Widget 203
13.9 RequireJS和jQuery UI Widget Factory 206
13.9.1 用法 208
13.9.2 延伸阅读 209
13.10 全局选项和单次调用可重写选项(最佳选项模式) 209
延伸阅读 211
13.11 高可配和高可变的插件模式 211
延伸阅读 213
13.12 是什么使插件超越模式 213
13.12.1 质量 214
13.12.2 代码风格 214
13.12.3 兼容性 214
13.12.4 可靠性 214
13.12.5 性能 214
13.12.6 文档 215
13.12.7 维护的可能性 215
13.13 总结 215
13.14 命名空间模式 215
13.15 命名空间基础 216
13.15.1 单一全局变量 216
13.15.2 命名空间前缀 217
13.15.3 对象字面量表示法 217
13.15.4 嵌套命名空间 221
13.15.5 立即调用的函数表达式(IIFE) 222
13.15.6 命名空间注入 224
13.16 高级命名空间模式 226
13.16.1 自动嵌套的命名空间 227
13.16.2 依赖声明模式 229
13.16.3 深度对象扩展 229
13.16.4 推荐 232
第14章 总结 233
附录 参考文献 235
��