腾讯前端Alloy Team团队出品,资深前端工程师曾探力作 全面涵盖专门针对JavaScript的16个设计模式 深剖析面向对象设计原则、编程技巧及代码重构 设计模式是软件设计中经过了大量实际项目验证的可复用的优秀解决方案,它有助于程序员写出可复用和可维护性高的程序。许多优秀的JavaScript源框架都运用了不少设计模式,越来越多的程序员从设计模式中获益,也许是改善了自己编写的某个软件,也许是更好地理解了面向对象的编程思想。无论如何,系统地学习设计模式都会令你受益匪浅。
售 价:¥
纸质售价:¥44.20购买纸书
温馨提示:数字商品不支持退换货,不提供源文件,不支持导出打印
为你推荐
本书结构
目标读者
示例代码与勘误
致谢
前言
学习模式的作用
模式在不同语言之间的区别
设计模式的适用性
分辨模式的关键是意图而不是结构
对JavaScript设计模式的误解
模式的发展
第一部分 基础知识
第 1 章 面向对象的JavaScript
1.1 动态类型语言和鸭子类型
1.2 多态
1.3 封装
1.4 原型模式和基于原型继承的JavaScript对象系统
第 2 章 this、call和apply
2.1 this
2.2 call和apply
第 3 章 闭包和高阶函数
3.1 闭包
3.2 高阶函数
3.3 小结
第二部分 设计模式
第 4 章 单例模式
4.1 实现单例模式
4.2 透明的单例模式
4.3 用代理实现单例模式
4.4 JavaScript中的单例模式
4.5 惰性单例
4.6 通用的惰性单例
4.7 小结
第 5 章 策略模式
5.1 使用策略模式计算奖金
5.2 JavaScript版本的策略模式
5.3 多态在策略模式中的体现
5.4 使用策略模式实现缓动动画
5.5 更广义的“算法”
5.6 表单校验
5.7 策略模式的优缺点
5.8 一等函数对象与策略模式
5.9 小结
第 6 章 代理模式
6.1 第一个例子——小明追MM的故事
6.2 保护代理和虚拟代理
6.3 虚拟代理实现图片预加载
6.4 代理的意义
6.5 代理和本体接口的一致性
6.6 虚拟代理合并HTTP请求
6.7 虚拟代理在惰性加载中的应用
6.8 缓存代理
6.9 用高阶函数动态创建代理
6.10 其他代理模式
6.11 小结
第 7 章 迭代器模式
7.1 jQuery中的迭代器
7.2 实现自己的迭代器
7.3 内部迭代器和外部迭代器
7.4 迭代类数组对象和字面量对象
7.5 倒序迭代器
7.6 中止迭代器
7.7 迭代器模式的应用举例
7.8 小结
第 8 章 发布—订阅模式
8.1 现实中的发布-订阅模式
8.2 发布-订阅模式的作用
8.3 DOM事件
8.4 自定义事件
8.5 发布-订阅模式的通用实现
8.6 取消订阅的事件
8.7 真实的例子——网站登录
8.8 全局的发布-订阅对象
8.9 模块间通信
8.10 必须先订阅再发布吗
8.11 全局事件的命名冲突
8.12 JavaScript实现发布-订阅模式的便利性
8.13 小结
第 9 章 命令模式
9.1 命令模式的用途
9.2 命令模式的例子——菜单程序
9.3 JavaScript中的命令模式
9.4 撤销命令
9.5 撤消和重做
9.6 命令队列
9.7 宏命令
9.8 智能命令与傻瓜命令
9.9 小结
第 10 章 组合模式
10.1 回顾宏命令
10.2 组合模式的用途
10.3 请求在树中传递的过程
10.4 更强大的宏命令
10.5 抽象类在组合模式中的作用
10.6 透明性带来的安全问题
10.7 组合模式的例子——扫描文件夹
10.8 一些值得注意的地方
10.9 引用父对象
10.10 何时使用组合模式
10.11 小结
第 11 章 模板方法模式
11.1 模板方法模式的定义和组成
11.2 第一个例子——Coffee or Tea
11.3 抽象类
11.4 模板方法模式的使用场景
11.5 钩子方法
11.6 好莱坞原则
11.7 真的需要“继承”吗
11.8 小结
第 12 章 享元模式
12.1 初识享元模式
12.2 内部状态与外部状态
12.3 享元模式的通用结构
12.4 文件上传的例子
12.5 享元模式的适用性
12.6 再谈内部状态和外部状态
12.7 对象池
12.8 小结
第 13 章 职责链模式
13.1 现实中的职责链模式
13.2 实际开发中的职责链模式
13.3 用职责链模式重构代码
13.4 灵活可拆分的职责链节点
13.5 异步的职责链
13.6 职责链模式的优缺点
13.7 用AOP实现职责链
13.8 用职责链模式获取文件上传对象
13.9 小结
第 14 章 中介者模式
14.1 现实中的中介者
14.2 中介者模式的例子——泡泡堂游戏
14.3 中介者模式的例子——购买商品
14.4 小结
第 15 章 装饰者模式
15.1 模拟传统面向对象语言的装饰者模式
15.2 装饰者也是包装器
15.3 回到JavaScript的装饰者
15.4 装饰函数
15.5 用AOP装饰函数
15.6 AOP的应用实例
15.7 装饰者模式和代理模式
15.8 小结
第 16 章 状态模式
16.1 初识状态模式
16.2 状态模式的定义
16.3 状态模式的通用结构
16.4 缺少抽象类的变通方式
16.5 另一个状态模式示例——文件上传
16.6 状态模式的优缺点
16.7 状态模式中的性能优化点
16.8 状态模式和策略模式的关系
16.9 JavaScript版本的状态机
16.10 表驱动的有限状态机
16.11 实际项目中的其他状态机
16.12 小结
第 17 章 适配器模式
17.1 现实中的适配器
17.2 适配器模式的应用
17.3 小结
第三部分 设计原则和编程技巧
第 18 章 单一职责原则
18.1 设计模式中的SRP原则
18.2 何时应该分离职责
18.3 违反SRP原则
18.4 SRP原则的优缺点
第 19 章 最少知识原则
19.1 减少对象之间的联系
19.2 设计模式中的最少知识原则
19.3 封装在最少知识原则中的体现
第 20 章 开放-封闭原则
20.1 扩展window.onload函数
20.2 开放和封闭
20.3 用对象的多态性消除条件分支
20.4 找出变化的地方
20.5 设计模式中的开放-封闭原则
20.6 开放-封闭原则的相对性
20.7 接受第一次愚弄
第 21 章 接口和面向接口编程
21.1 回到Java的抽象类
21.2 interface
21.3 JavaScript语言是否需要抽象类和interface
21.4 用鸭子类型进行接口检查
21.5 用TypeScript编写基于interface的命令模式
第 22 章 代码重构
22.1 提炼函数
22.2 合并重复的条件片段
22.3 把条件分支语句提炼成函数
22.4 合理使用循环
22.5 提前让函数退出代替嵌套条件分支
22.6 传递对象参数代替过长的参数列表
22.7 尽量减少参数数量
22.8 少用三目运算符
22.9 合理使用链式调用
22.10 分解大型类
22.11 用return退出多重循环
参考文献
买过这本书的人还买过
读了这本书的人还在读
同类图书排行榜