如果时间倒退一点,很难想象我这样的“懒人”会花上近一年的业余时间来完成这本书。

这本书的原型是我发表在腾讯内部KM论坛的一篇文章《JavaScript常用设计模式》。这篇文章反响不错,还位列2012年KM十大热门文章第一名。不过说老实话,当时自己也是模式的初学者,和网上大部分讨论设计模式的文章一样,这篇文章里其实存在一些错误,这里要诚恳地说声抱歉。也正是由于这个原因,近两年我重新投身于对设计模式的研究之中。尽管如此,当在电脑上敲下本书第一行字的时候,我心中还是非常忐忑。一是我自己本身并非理论派,大部分工作时间都在做上层应用开发,很多偏理论的知识对于我来说,也是一个学习加总结的过程,二是不确保自己能否牺牲如此多的业余时间,毕竟很难削减玩LOL的时间。

无论如何,它终于和大家见面了。

本书结构

本书共分为三大部分。

第一部分讲解了JavaScript面向对象和函数式编程方面的知识,主要包括静态类型语言和动态类型语言的区别及其在实现设计模式时的异同,以及封装、继承、多态在动态类型语言中的体现,此外还介绍了JavaScript基于原型继承的面向对象系统的来龙去脉,给学习设计模式做好铺垫。

第二部分是核心部分,通过从普通到更好的代码示例,由浅到深地讲解了16个设计模式。

第三部分主要讲解面向对象的设计原则及其在设计模式中的体现,还介绍了一些常见的面向对象编程技巧和日常开发中的代码重构。

目标读者

本书主要面向初中级JavaScript开发人员。本书虽然以设计模式为主题,但也讲述了一些JavaScript开发中需要的基础知识,初级程序员也能从这里找到自己需要的东西。而对于中级程序员而言,学习设计模式的过程,可能正是往高级进阶的过程。

示例代码与勘误

本书提供了丰富的示例,示例代码可以在图灵社区本书主页(http://www.ituring.com.cn/book/1632)的“随书下载”中下载使用。

另外,由于作者的水平和时间所限,本书中难免存在一些遗憾。如果大家发现有什么问题,或者对本书有任何建议,欢迎到图灵社区本书主页提交勘误,也可以发送邮件到svenzeng@tencent.com来讨论,先谢谢!:)

致谢

虽然在写作过程中经历了不少曲折,但最终顺利完成。在这里,我想感谢为我提供帮助的所有人。

感谢图灵的美女编辑Alice,没有她的帮助,这本书不可能完成。

感谢AlloyTeam团队中每一个成员对我的指导和帮助,在这里工作不仅是工作,也是生活很重要的一部分。

感谢贺师俊、王集鹄、易郑超、程劭非几位老师提供的技术指导和宝贵建议。

感谢设计师“出壳设计”设计的插画和封面,它们让内容更加生动有趣。

最后,感谢我的妻子Annie,遇见你,是最美丽的意外。

目录

  • 前言
  • 第一部分 基础知识
  • 第 1 章 面向对象的JavaScript
  • 第 2 章 this、call和apply
  • 第 3 章 闭包和高阶函数
  • 第二部分 设计模式
  • 第 4 章 单例模式
  • 第 5 章 策略模式
  • 第 6 章 代理模式
  • 第 7 章 迭代器模式
  • 第 8 章 发布—订阅模式
  • 第 9 章 命令模式
  • 第 10 章 组合模式
  • 第 11 章 模板方法模式
  • 第 12 章 享元模式
  • 第 13 章 职责链模式
  • 第 14 章 中介者模式
  • 第 15 章 装饰者模式
  • 第 16 章 状态模式
  • 第 17 章 适配器模式
  • 第三部分 设计原则和编程技巧
  • 第 18 章 单一职责原则
  • 第 19 章 最少知识原则
  • 第 20 章 开放—封闭原则
  • 第 21 章 接口和面向接口编程
  • 第 22 章 代码重构
  • 参考文献