程序设计模式语言·卷5
2009年
清华大学出版社
马诺勒斯库,Markus Voelter,James Noble
424
陈宗斌
无
设计模式已经进入专业软件开发的主流,成为改善软件工程、系统设计、开发以及相关建立者之间交流质量的高效方法。模式捕获很多软件设计中的优秀经验,并使所有软件工程师都可以使用。 本系列丛书的第5卷(即本书)为专业软件开发人员整理了各种设计模式。本书涵盖了目前软件开发的最佳经验,这些都是从模式社区中提炼出来的。本书第19章所用的材料精炼了一流的模式,这些模式都是在最近的PLoP会议上提出,并由与会专家严格审核和改善过的。这些代表了会议最佳成果的模式为在各领域解决实际问题提供了高效、可测而且通用的软件设计方案。
Dragos Manolescu,ThoughtWorks公司的软件体系结构设计师,从事体系结构评估和企业集成项目的工作。Dragos从1996年起加入模式社区。并在PLoP 1999年的会议上成为主席,参与编写了PLoPD第4卷,与他人合著了“Integration Patterns”一书。
第Ⅰ部分 设计模式 第1章 动态对象模型 1.1 目的 1.2 别名 1.3 动机 1.4 问题 1.5 解决方案结构 1.6 优缺点 1.6.1 简明性 1.6.2 灵活性 1.6.3 最终用户配置 1.6.4 编程环境 1.6.5 动态行为 1.6.6 运行时输入 1.6.7 可移植性 1.7 扩展 1.8 实现 1.9 示例代码 1.10 已知应用 1.11 相关模式 1.12 致谢 1.13 参考文献 第2章 域对象管理器 2.1 目的 2.2 别名 2.3 动机 2.4 可应用性 2.5 结构 2.6 组成 2.7 协作 2.8 结果 2.9 实现 2.10 示例代码 2.11 已知应用 2.12 相关模式 2.13 致谢 2.14 参考文献 第3章 封装上下文 3.1 受众 3.2 示例 3.3 问题 3.4 限制条件 3.4.1 可替换性 3.4.2 封装 3.4.3 耦合到环境 3.4.4 避免数据复制 3.5 解决方案 3.6 实现 3.7 最终解决方案 3.8 变体 3.9 结果 3.9.1 可替换性 3.9.2 封装 3.9.3 耦合到环境 3.9.4 避免数据复制 3.9.5 推理 ……第Ⅱ部分 并发、网络与实时模式 第4章 用于高效、可预测及可伸缩的调度组件的模式语言 第5章 3T——硬实时系统中用于可靠通信的模式系统 第6章 实进和资源超载语言第Ⅲ部分 分布式系统 第7章 分散锁定 第8章 比较模式:使用专门值简化身份测试 第9章 服务发现的模式语言第Ⅳ部分 特定于域的模式 第10章 MoRaR:移动与无线资源管理的模式语言 第11章 Web上的内容转换与生成:模式语言第Ⅴ部分 体系结构模式 第12章 插件模式 第13章 网格体系结构模式:影响分布式处理能力 第14章 组件和语言集成的模式 第15章 成功框架开发的模式第Ⅵ部分 元模式 第16章 高级模式编写 第17章 语言设计者的模式语言 第18章 审阅语言 第19章 草原式住宅模式作者介绍
第Ⅰ部分 设计模式 第1章 动态对象模型 1.4 问题 动态对象模型(DYNAMIC OBJECT MODEL)模式解决了很多不同的问题。有些系统只 存在其中的一个或几个问题: 一个系统是很难理解、改变和发展的,因为它很复杂。由于有太多类型的对象,系统可能更复杂,但其实它们只在少数几个方面有所区别。 系统需要经常变化和迅速发展,新类型的对象必须在运行时创建。例如,最终用户可能需要指定这些新类型的对象,也需要立即将对象与原有系统结合,而不需要重建系统。 系统需要特定于域的建模语言,可能是因为它是由最终用户使用,也可能是因为它需要自定义的类型验证,还可能是因为它需要从模型生成复杂的行为。 通常是一个动态对象模型的出发点是使系统更加简单和更容易改变。后来则很明显,用户通过该模式不涉及编程即可指定变化,现在该系统则包含特定领域的建模语言。但是,有些动态对象模型不允许最终用户定义新类型,有时是动态对象模型以对特定领域建模语言的需要开始。 Smalltalk等语言支持在运行时修改类,即使在类有实例时也可以修改。还允许开发人员在一定范围内适应(改编)元模型描述——类是什么样子以及如何运作。另一方面,类Java语言在这方面更为有限,甚至不考虑多重环境中串行化所引起的类不兼容的问题。那么为什么不使用上述某种动态编程语言呢?首先,许多客户已经固定使用一种或几种常用语言(通常是静态的),通常不会选择引入另一种语言。但更深刻的问题在于,它涉及的不仅仅是选择合适实现语言的技术问题。一般来讲,使用动态对象模型主要的根本动机,是使解决方案的“配置”更接近最终用户。1.10节给出了一些示例,例如域专家深入参与开发最终用户应用程序的过程。对这些用户应用通用编程语言和传统集成开发环境,会偏离既定目标。因此,动态对象模型驱动的系统往往伴随一套特定领域的高层次开发工具。
无