阅读指南

“柴郡猫,你能告诉我该走哪条路吗?”
“这要看你想去哪里。”柴郡猫说道。
“我不太在乎去哪里。”爱丽丝说道。
“那你走哪条路都无所谓。”猫咪说道。
“只要我能到达某个地方就行。”爱丽丝补充道。
“哦,那是当然,”柴郡猫说,“只要你走的时间够长。”

——《爱丽丝梦游仙境》,刘易斯·卡罗尔

本书有自己的组织结构,读者可以从头至尾通读本书。但是,如果知道自己想读哪一部分,也可以按照自己的方式来阅读。此时,下面的提示可以帮助读者选择想要关注的主题以及阅读顺序。

模式导论

如果在阅读本书之前没有接触过模式,我们建议读者先阅读[POSA1]和[GoF95]中的模式导论部分,该导论探讨了软件架构和设计方面与模式相关的概念和术语。需要指出的是,本书中的所有模式都建立在[POSA1]介绍的模式概念基础之上,包括:

  • 软件架构模式的定义;
  • 模式的分类(架构模式、设计模式和成例 1);
  • 模式的描述格式。

1 关于这些模式分类的定义参见8.1 节。

此外,本书中很多模式的实现都使用了[POSA1]及[GoF95]中的模式并加以改良。因此,为了在软件开发项目中使用这些模式,我们建议你把这三本书放在案头,以备查阅。

结构与内容

本书第1 章描述了设计并发与联网系统时面临的主要挑战,然后概述了我们所介绍模式的适用范围与环境,最后展示了一个案例研究:使用本书介绍的8 个模式开发一个并发的Web 服务器。

16 个模式描述和一个成例构成了本书的主体。我们将这些模式和成例分四章进行介绍,分别对应并发与联网中间件和应用程序开发过程中面临的关键问题领域:服务访问与配置、事件处理、同步、并发。这些材料的阅读顺序可以自行确定,其中一种阅读顺序是首先阅读重要的核心模式:

  • Wrapper Facade设计模式;
  • Reactor架构模式;
  • Acceptor-Connector设计模式;
  • Active Object设计模式。

本书其余12 个模式与一个成例的安排则尽量避免引用尚未描述的模式。当然读者可以按任意顺序来学习这些模式。这些材料完成并补充了上面列举的四个模式所定义的概念,并涵盖了有效设计和实现并发与联网对象相关的各种问题。

读者也可以使用本书查找解决方案,解决在项目中遇到的问题。可以先使用第6 章中的模式概览帮助查询,然后再对可能作为解决方案的模式从第2 章到第5 章中找到相关的详细描述。

任何模式都不是一座孤岛,不会与其他模式彻底隔绝。因此,第6 章描述了如何把本书中的所有模式组织起来形成一种模式语言,以服务于构建联网的应用程序和中间件。如果想在深入钻研单个模式之前了解本书模式的全貌,我们推荐读者先走马观花地略读第6 章介绍的模式语言,然后再深入阅读第2 章到第5 章的模式。

第7 章与第8 章是本书的最后两章,其中包括术语表、图表中所用符号概述、相关文献的引用以及索引。

模式格式

本书介绍的全部模式均自成一体,沿用了[POSA1]的模式格式。使用该模式格式,既能描述模式的核心内容,又能描述模式的关键细节。我们的目标是:既服务于那些只是想简单地了解模式基本知识的读者,又服务于那些想深入了解模式工作原理的读者。

在本书的模式格式中,每一节均对后续部分做了铺垫。例如,“示例”部分引出了“背景”、“问题”以及“解决方案”,而这几部分则概括了模式的核心内容;“解决方案”部分则为“结构”和“交互”做了铺垫,然后这两部分更为详细地描述了模式的工作原理,这也为读者理解后续的“实现”做好了铺垫。

接下来的“示例解答”、“变种”、“已知应用”、“效果”以及“参见”部分完成了对每个模式的描述。书中还包含了大量的交叉引用,以便读者理解本书与其他出版物所讲模式之间的关系。

为了将模式实现过程的描述与生产软件系统挂钩,很多示例代码都有ACE 框架[Sch97]所提供组件的影子。如果只是想先知道所有模式的概况,读者可以在初读本书时跳过“实现”部分,然后当需要知道特定模式的实现细节时再回过头来仔细阅读该部分。

尽管本书使用的模式格式会导致模式的描述略有重复,但是我们发现这种重复可以将“回溯查阅”的可能性降到最低,从而帮助读者更有效地浏览对模式的描述。

在使用图表解释模式的结构与行为时,我们尽量遵循UML 的标准。但在极少数情况下,UML 并不能足够准确地表达我们的意思,所以正如8.2 节指出的那样,我们稍微“扩展”了UML的标准符号。

背景知识

对于很多模式,尤其是Reactor、Proactor、Half-Sync/Half-Async 以及Leader/Followers,我们假定读者熟悉以下内容。

  • 面向对象的设计技术,例如模式 [GoF95] [POSA1]与成例[Cope92]、UML符号[BRJ98]以及结构化编程原理,特别是封装与模块化 [Mey97]。
  • 面向对象的编程语言特性,例如类[Str97]、继承与多态(polymorhism)[AG98]以及参数化类型[Aus98]。尽管我们介绍了大多数模式的Java已知应用,但是本书的很多示例都是使用C++实现的。
  • 系统编程的概念与机制,比如进程与线程管理[Lew95] [Lea99a] [Ric97]、同步 [Ste98]以及进程间通信[Ste99]。
  • 网络服务与协议,比如客户端—服务器计算 [CoSte92]以及因特网协议 [Ste93] [SW94]。

本书涉及丰富的专业术语和参考书目,以区分各种技术概念。本书还针对读者可能会进一步学习的主题,提供了相关信息来源。本书毕竟不是一本并发与网络编程的入门教程,所以如果对以上列举的内容不熟悉,我们建议读者结合本书对我们推荐的相关材料做一些背景阅读。

目录

  • 关于本书
  • 阅读指南
  • 第1章 并发与联网对象
  • 第2章 服务访问和配置模式
  • 第3章 事件处理模式
  • 第4章 同步模式
  • 第5章 并发模式
  • 第6章 模式的综合运用
  • 第7章 模式的过去、现在及未来
  • 第8章 结束语
  • 参考文献
  • 索引