《设计模式:可复用软件对象软件的基础》的阅读笔记 -第二章 2.3格式化
在《设计模式:可复用面向对象软件的基础》中,文档格式化部分主要通过策略模式(Strategy Pattern)和组合模式(Composite Pattern)来实现,以下是详细解析:
1. 格式化问题的背景
文档编辑器需要支持多种格式化功能,例如将文本分行、分列、设置边界宽度等。这些格式化功能可能会随着用户需求的变化而变化,因此需要一个灵活的解决方案来支持不同的格式化算法。
2. 组合模式(Composite Pattern)的应用
-
总体思想:将文档结构中的各种图元(如字符、单词、行、列等)组织成树形结构,以便统一处理单个图元和组合图元。
-
具体实现:
-
定义一个抽象类
Glyph,表示文档中的图元。Glyph类提供了一些基本的操作接口,如draw(绘制)、accept(接受访问者)等。 -
创建
Glyph的子类,如Character(字符)、Word(单词)、Row(行)、Column(列)等。这些子类实现了具体的图元行为。 -
使用
Composition类来组合多个Glyph对象。Composition类本身也是Glyph的子类,它包含了一个Glyph对象的集合,并将操作委托给集合中的每个图元。
-
-
优点:
-
一致性:客户端可以一致地对待单个图元和组合图元,无需关心它们的具体类型。
-
层次结构:通过递归组合,可以构建复杂的文档结构,同时保持代码的简洁性。
-
3. 策略模式(Strategy Pattern)的应用
-
总体思想:将格式化算法抽象出来,封装为独立的类,从而实现算法与使用算法的客户端之间的解耦。
-
具体实现:
-
定义一个格式化接口
Compositor,它声明了一个compose方法,用于执行具体的格式化操作。 -
创建多个
Compositor的子类,每个子类实现一种特定的格式化算法。例如,LeftJustifyCompositor用于左对齐格式化,CenterJustifyCompositor用于居中对齐格式化等。 -
在文档结构中,
Composition类(表示组合的图元)包含一个Compositor类型的对象。当需要对文档进行格式化时,Composition类将格式化请求委托给其内部的Compositor对象。
-
-
优点:
-
灵活性:通过更换
Compositor对象,可以在运行时动态改变文档的格式化策略,而无需修改Composition类的代码。 -
可扩展性:新增格式化算法时,只需添加一个新的
Compositor子类,无需修改现有代码。
-
4. 格式化过程
-
当用户对文档进行格式化操作时,文档编辑器会根据用户选择的格式化策略(如左对齐、居中对齐等),创建相应的
Compositor对象。 -
Composition类会将格式化请求委托给其内部的Compositor对象,Compositor对象会遍历Composition中的各个子图元,并对它们进行格式化。 -
由于
Composition类使用了组合模式,它可以递归地对子图元进行格式化,从而实现整个文档的格式化。
5. 总结
通过策略模式和组合模式的结合,文档编辑器能够灵活地支持多种格式化算法,并且能够方便地扩展新的格式化功能。这种设计模式的应用不仅提高了系统的灵活性和可扩展性,还使得代码更加清晰和易于维护。

浙公网安备 33010602011771号