实例研究:设计一个文档编辑器(1)
通过设计一个称为L e x i 的“所见即所得”(或“W Y S I W Y G”)的文档编辑器,来介绍设计模式的实际应用。我们将会看到在L e x i和类似应用中,设计模式是怎样解决设计问题的。在本章最后,通过这个例子的学习你将获得8个模式的实用经验。
图2 - 1是L e x i的用户界面。文档的所见即所得的表示占据了中间的大矩形区域。文档能够以不同的格式风格自由混合文本和图形。文档的周围是通常的下拉菜单和滚动条,以及一些用来跳到特定页的页码图标。
1 设计问题
我们将考察L e x i设计中的7个问题:
1) 文档结构对文档内部表示的选择几乎影响L e x i设计的每个方面。所有的编辑、格式安排、显示和文本分析都涉及到这种表示。我们怎样组织这个信息会影响到应用的其他方面。
2) 格式化L e x i是怎样将文本和图形安排到行和列上的?哪些对象负责执行不同的格式策略?这些策略又是怎样和内部表述相互作用的?
3) 修饰用户界面L e x i的用户界面包括滚动条、边界和用来修饰W Y S I W Y G文档界面的阴影。这些修饰有可能随着L e x i用户界面的演化而发生变化。因此,在不影响应用其他方面的情况下,能自由增加和去除这些修饰就十分重要了。
4 ) 支持多种视感( l o o k - a n d - f e e l )标准L e x i应不需作较大修改就能适应不同的视感标准,如M o t i f和Presentation Manager(PM)等。
5 ) 支持多种窗口系统不同的视感标准通常是在不同的窗口系统上实现的。L e x i的设计应尽可能的独立于窗口系统。
6 ) 用户操作用户通过不同的用户界面控制L e x i,包括按钮和下拉菜单。这些界面对应的功能分散在整个应用对象中。这里的难点在于提供一个统一的机制,既可以访问这些分散的功能,又可以对操作进行撤消( u n d o )。
7 ) 拼写检查和连字符L e x i是怎样支持像检查拼写错误和决定连字符的连字点这样的分析操作的?当我们不得不添加一个新的分析操作时,我们怎样尽量少修改相关的类?
我们将在陆续讨论这些设计问题。每个问题都有一组相关联的目标集合和我们怎样达到这些目标的限制条件集合。在给出特定解决方案之前,我们会详细解释设计问题的目标和限制条件。问题和其解决方案会列举一个或多个设计模式。对每个问题的讨论将在对相关设计模式的简单介绍后结束。