设计模式可复用面向对象软件的基础豆瓣典藏版PDF电子版下载附源代码|百度网盘下载

编辑评论:

Design Patterns: The Foundation of Reusable Object-Oriented Software(典藏版) 从面向对象设计中选取23种设计模式结合设计实例,总结了面向对象中最重要的设计模式设计有价值的经验,并以简洁、可重复使用的形式表达出来。本书对一组设计精良、表达清晰的软件设计模式进行了分类,这些模式在实际环境中特别有用

Design Patterns Reusable Object-Oriented Software Foundation 豆瓣珍藏版PDF电子版下载

关于作者

Erich Gamma 拥有瑞士苏黎世大学的计算机科学博士学位。他与 Kent Beck 一起开发了单元测试框架 JUnit,并领导了 Eclipse Java 开发工具项目。他还是 IBM Rational Jazz 项目的重要成员。 2011 年,Gamma 以杰出工程师的身份加入 Microsoft Visual Studio 团队,领导微软位于瑞士苏黎世的实验室。

Richard Helm 拥有博士学位。拥有澳大利亚墨尔本大学计算机科学博士学位,曾在 IBM T. J. Watson 担任研究员,并在澳大利亚创立了 IBM 面向对象技术研究部。

Ralph Johnson 获得了博士学位。康奈尔大学计算机科学博士,伊利诺伊大学教授。

John Vlissides 获得了博士学位。斯坦福大学计算机科学博士学位,是 IBM T. J. Watson 研究中心的研究员。

Smalltalk MVC 中的设计模式

在 Smalltalk-80 中,ModelView/Controller 三元组 (MVC) 类用于构建用户界面。通过 MVC 查看设计模式将帮助我们理解术语“模式”的含义。

MVC 包括三种类型的对象。模型是应用程序对象,视图是它的屏幕表示,控制器定义用户界面如何响应用户输入。如果没有 MVC,用户界面设计倾向于将这些对象混合在一起,而 MVC 将它们分开以实现灵活性和可重用性。

MVC 通过建立“order/notify”协议将视图和模型分开。视图必须确保其显示正确反映模型的状态。一旦模型的数据发生变化,模型就会通知相关的视图,每个视图都有自己的机会进行相应的刷新。这种方法允许您为模型提供多个视图的不同表示,以及为模型创建新视图,而无需重写模型。

设计问题

我们将考察 Lexi 设计中的 7 个问题:

1) 文档结构 文档内部表示的选择几乎影响了 Lexi 设计的各个方面。所有编辑、格式化、显示和文本分析都涉及这种表示。我们如何组织这些信息会影响应用程序的其他方面。

2) 格式化 Lexi 如何将文本和图形排列成行和列?哪些对象负责执行不同的格式化策略?这些策略如何与内部表征相互作用?

3) 装饰用户界面 Lexi 的用户界面包括用于装饰所见即所得文档界面的滚动条、边框和阴影。随着 Lexi 用户界面的发展,这些修改可能会发生变化。因此,能够在不影响应用程序其他方面的情况下自由添加和删除这些修改非常重要。

4) 支持多种外观标准 Lexi 应该能够适应不同的外观标准,例如 Motif 和 Presentation Manager (PM),而无需进行重大修改。

5) 支持多个窗口系统 不同的视觉标准通常在不同的窗口系统上实现。 Lexi 应该被设计成尽可能独立于窗口系统。

6) 用户操作 用户通过不同的用户界面控制 Lexi,包括按钮和下拉菜单。这些接口对应的功能分散在整个应用程序对象中。这里的困难是提供一个统一的机制来访问这些离散的函数和撤销操作。 .

7) 拼写检查和断字 Lexi 如何支持分析操作,例如检查拼写错误和确定连字符的断字点?当我们要添加新的分析操作时,如何才能尽可能少地修改相关类呢?

我们将在以下部分讨论这些设计问题。每个问题都有一组相关的目标和一组关于我们如何实现这些目标的限制。在给出具体解决方案之前,我们会详细解释设计问题的目标和约束。问题及其解决方案列举了一种或多种设计模式。每个问题的讨论都以对相关设计模式的简要介绍结束。

什么是格式化

我们已经解决了表示文档物理结构的问题。接下来,我们需要解决的问题是如何构造一个特殊的物理结构来对应一个格式正确的文档。表示和格式化是不同的,记录文档物理结构的能力并不能告诉我们如何获得特定的格式化结构。大部分责任在于 Lexi,它必须将文本分成行,将行分成列,等等。还要考虑用户的高级要求,例如,用户可以指定边框宽度、缩进大小和表格格式、隔行扫描以及可能的许多其他格式约束。 Lexi 的格式化算法必须考虑所有这些因素。

我们现在将“格式化”的含义限制为将基元集合分解为行。下面我们交替使用术语“格式化”和“换行”。下面讨论的技术同样适用于将行拆分为列,将列拆分为页面。

阅读剩余
THE END