这本书的结构适合你一页一页的读。然而如果你知道你想去哪,你可能想选择你看本书的自己的方法。在这种情况下,下面的提示可能会帮助你决定关注哪个话题以及以什么顺序阅读它们。
模式简介
如果本书是你初次接触模式,我们建议你先阅读[POSA1]和[GoF95]里的模式介绍,它们探究了与软件架构和设计模式相关的概念和术语。特别是,本书介绍的所有模式都建立在[POSA1]列出的概念基础之上:
l 软件架构模式的定义
l 这些模式分成架构模式,设计模式和惯用法的分类方法和
l 模式描述格式
而且,本书中很多模式的实现是通过使用[POSA1]和[GoF95]中的模式来增强的。为了在产品软件开发项目中指引模式的应用,我们因此建议你把所有这三本书放在手边。
可以在Glossary找到这些模式种类的定义。
结构和内容
本书的第一章,并发网络对象,描述了设计并发网络系统的关键问题。它也列出了我们介绍的模式的使用范围和环境。最后,它介绍了一个案例,该案例应用本书的八个模式来开发一个并发Web服务器。
十六个模式描述和一个惯用法构成了本书的主要部分。我们把它们根据开发并发和网络中间件和应用程序的关键问题领域(服务访问和配置,事件处理,同步和并发)分别放在四章里。你阅读这些资料的顺序取决于你。一个方法是首先阅读重要的核心模式:
l 包装外观设计模式(Wrapper Façade,47)
l 反应器架构模式(Reactor,179)
l 接受者-连接者设计模式(Acceptor-Connector,285)
l 活动对象设计模式(Active Object,369)
本书的其它十二个模式和一个惯用法被安排成最小化前向引用。你可以按照任何顺序阅读它们,并且我们提供了页码来追踪引用到本书中的其它模式。这些资料完成以及补充了上边列出的四个模式定义的概念并且覆盖了与高效的设计和实现并发网络对象相关的一定范围的问题。
你也可以使用本书来查找你在项目中遇到的问题的解决方案。使用第6章,将模式组织在一起,中关于我们模式的概述, 来指导你的搜索,然后在第2章到第5章中找到你选择的作为可能的解决方案的模式的详细描述。
没有模式是孤岛,完全与其它模式分离。因此,第6章,将模式组织在一起,还描述了本书的所有模式怎样组织在一起来形成建造网络应用程序和中间件的模式语言。人如果你想在钻研某个独立的模式之前对本书中模式的有个全面的看法,我们建议你在深入阅读第2章到第5章中的模式之前略读一下第6章里的模式语言介绍。
第7章,模式的过去,现在和将来,以及第8章,结束语完成了本书的主要内容。本书剩下的部分由一个技术术语表,一个在图片中使用的符号概览,相关工作参考,以及一个模式,课题和名字的索引。
我们采用了[GoF95]中引入的页码符号。(47)表示相应的模式描述从47页开始。
模式形式
本书介绍的所有模式都是独立的,遵循[POSA1]的模式形式。这种形式允许我们介绍模式的本质和关键细节。我们的目标是既适合那些只想了解模式基本思想概述的读者,也适合那些想深入知道模式怎么工作的读者。
我们模式形式的每个小节都为后面的小节打好基础。例如,例子(Example)小节引出了环境(Context),问题(Problem),和解决方案(Solution)小节,它们概述了模式的本质。解决方案(Solution)小节预示着结构(Structure)和动力(Dynamics)小节,它们接下来介绍关于模式怎样工作的更详细的信息,为读者准备实现(Implementation)小节。
解决的例子(Example Resolved),变体(Variants),已知应用(Known Uses),效果(Consequences)和参照(See Also)小节完成了每个模式描述。我们包含大量的交叉引用来帮助你理解本书中模式和其它发表的模式间的关系
为了将模式实现活动的描述与产品软件系统联系起来,大部分例子代码借鉴了ACE框架[Sch97]中提供的组件。如果你首先想对所有模式有个概观,你可能会因此想在最初浏览本书时略过实现(Implementation)小节,并在你需要知道某个特定模式的实现细节时再回到它们。
尽管我们在本书中使用的模式形式在模式描述时导致一些重复,我们发现这些重复通过最小化反响跟踪(back-tracking)来帮助读者更高效的查阅描述。
在解释我们的模式的结构和行为的图中,我们尽量在可能的时候遵循标准UML。然而,在个别情况下,UML不能让我们足够精确的表达我们自己。因此我们稍微“扩展”了标准符号,这些符号在Notations章里说明。
背景读物
很多模式,特别是反应器(Reactor,179),前摄器(Proactor,215),半同步/半异步(Half-Sync/Half-Async,423)以及领导者/追随者(Leader/Followers,447),假设你熟悉下边这些话题:
l 面向对象设计技术,如模式[GoF95][POSA1]和惯用法[Cope92],UML符号[BRJ98],以及面向结构编程的原则,特别是封装和模块化[Mey97]。
l 面向对象编程语言特性,如类[Str97],继承和多态[AG98],以及类型参数化(译注:如模板)[Aus98]。本书的很多例子是用C++编写的,但是我们介绍了大部分模式的Java的已知应用。
l 系统编程概念和机制,如进程和线程管理[Lew95][Lea 99a ][Ric97],同步[Ste98],以及进程间通信[Ste99]。
l 网络服务和协议,如客户-服务计算[CoSte92]和Internet协议[Ste93][SW94]。
本书包含了一个大量的术语表和参考书目来澄清不熟悉的术语,以及为你可能想要进一步学习的课题建议一些信息资源。然而,它不是一个并发网络编程的介绍性的指南。因此,如果你对上边列出的某个话题不熟悉,我们建议你对我们推荐的和阅读本书相关的资料做些背景阅读。