格式化
将文本分解成行, 将行分解成列. 指定边界宽度, 缩进大小,列的形式, 是否隔行显示以及其它可能的许多格式限制条件. 理想状态下, 我们设计出来的类结构层次应该满足文档结构和格式算法. 比如我们增加一个Glyph子类, 但是不需要考虑修改格式算法, 增加一个格式算法不需要考虑修改子类.
基本的Compositor接口
可以将格式化有关的算法接口封闭在Compositor类中, Composition是整个文档图元(Glyph)子类的集成. 一个Composition实例在创建的时候可以得到一个Compositor. 当用户改变文档的时候, 可以让Compositor对Composition中的图元进行操作.
Responsibility | operation |
---|---|
1) 格式化的内容 | void SetComposition(Composition*) |
2) 执行格式化 | virtual void Compose() |
Compositor和Composition的类间关系(摘自图2-5)
Compisition制导分行对象结构(摘自图2-6)
Strategy模式总结
Strategy模式应用的关键在于为Strategy和Strategy环境设计足够多的接口, 用心支持一系列的算法. 这样软件在维护的时候便不用为了新增一个算法而改变其它的Strategy和Strategy环境. 比如这里的Compositor子类(ArrayCompositor, TexCompositor, SimpleComsitor)就是一个个Strategy. 这些子类实现的算法足以支持对于文档物理结构的修改. 并且Compositor的接口也支持Composition启动格式化.