面向对象/设计模式

事实上,深入理解面向对象更推荐阅读《Java 编程思想》,本书已经包含在 9.11 节之中(目前来说,更推荐阅读同一作者新出的《On Java》)。

虽然面向对象本身是利大于弊的,但其带来的设计模式却是不折不扣的糟粕。设计模式的出现是为了补救面向对象带来的各种问题,以达到一种“最佳实践(Best Practice)”的目的。因此,这些年一直有用函数式编程取代面向对象设计模式的呼声,尽管我个人认为希望不大。如果你有意向深耕 Java,那设计模式确实有必要学一学,但也最多推荐你随便读两本有关的书,至于再多就不建议了,设计模式尽量要在实践中尝试运用而不是啃书。

如果你打算从事前端工作、数据科学、人工智能等与狭义上的软件工程等关系不那么大的工作,我不建议你去学习设计模式,因为意义不是很大。相反,如果你打算从事前端,做数据科学工作,反而建议你尝试了解更多函数式编程的思想,这里没有相关书单推荐,并且也不建议看书,函数式思想本身高度融合进了各种编程语言之中,在实际使用有函数式特性的语言的过程中,自然就能融会贯通。

另外,使用 Python/JavaScript 等脚本语言时也不建议直接套用 Java 设计模式,这只会使你的代码变得不伦不类。当然,我这里讨论的只是狭义上的以 GoF 设计模式为基础的设计模式,至于广义上的设计模式,其意义更偏向于“最佳实践”,不在这里的讨论范围内。个人认为,主流语言中只有 Java 是有必要在多数代码上套用设计模式的,而其他多数语言只有在少数情况下有必要套用设计模式。至于 Python 这种异常灵活的语言,就更没有必要套用设计模式了,有时间套设计模式不如去学学怎么写出 Pythonic 的代码。

  • 设计模式:中文版正文 268 页,出版于 1995 年,双色印刷。提出了著名的 GoF 23 种设计模式,是设计模式以及面向对象领域最经典的读物。尽管本书并不厚,但理解难度仍然是比较高的,不推荐作为入门读物,然而作为世界上第一本也是最知名的有关设计模式的书,仍然建议每个 Java 程序员(甚至非 Java 程序员)都读一读。书中使用 Smalltalk 和 Java 作为示例。翻译一般。

  • 图解设计模式:中文版正文 291 页,日文原版出版于 2004 年,黑白印刷。使用友好的方式分别介绍了 GoF 23 种设计模式,比较适合入门。书中使用 Java 作为示例。翻译不错。

  • 面向对象是怎样工作的:中文版正文 278 页,日文原版出版于 2011 年,双色印刷。A5 大小的小书,很快就能读完。内容比较容易理解,大致梳理了与面向对象有关的不少要点(例如设计模式、函数式编程与 UML),适合对面向对象这一概念比较困惑的初学者,不适合入门一年以上的读者(因为太基础)。翻译不错。

  • UML 基础、案例与应用(第 3 版):中文版正文 284 页,英文原版出版于 2004 年,黑白印刷。虽然是老书,但由于 UML 标准近十几年几乎没有任何推进(即使有推进大家也仍在广泛使用 1997 年的版本),所以现在看起来甚至感觉内容新的离谱(指一大堆十几年前更新的 UML 标准至今没多少人用上)。个人认为,至少在讲清楚 UML 一块,这本书是少有的好选择,本身内容质量也很过关。虽然我对 UML 整体持着批判与厌恶的态度,但这不妨碍这是一本不错的书。不过通常来说没有必要读一本专门介绍 UML 的书,网上的 UML 快速入门读一遍就足够了,我推荐这本书仅仅是因为软件工程专业需要学习 UML,所以放在这作为参考书而已。翻译一般。

最后更新于