第2章-实例研究: 设计一个文档编辑器--格式化

本文介绍了一种用于文档格式化的类结构设计,通过Compositor接口实现对文档元素的格式化操作,利用Strategy模式确保算法的独立性和灵活性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

格式化

将文本分解成行, 将行分解成列. 指定边界宽度, 缩进大小,列的形式, 是否隔行显示以及其它可能的许多格式限制条件. 理想状态下, 我们设计出来的类结构层次应该满足文档结构和格式算法. 比如我们增加一个Glyph子类, 但是不需要考虑修改格式算法, 增加一个格式算法不需要考虑修改子类.


基本的Compositor接口

可以将格式化有关的算法接口封闭在Compositor类中, Composition是整个文档图元(Glyph)子类的集成. 一个Composition实例在创建的时候可以得到一个Compositor. 当用户改变文档的时候, 可以让Compositor对Composition中的图元进行操作.

Responsibilityoperation
1) 格式化的内容void SetComposition(Composition*)
2) 执行格式化virtual void Compose()

Compositor和Composition的类间关系(摘自图2-5)

Compositor和Composition的类间关系(摘自图2-5)


Compisition制导分行对象结构(摘自图2-6)

Compisition制导分行对象结构(摘自图2-6)


Strategy模式总结

Strategy模式应用的关键在于为Strategy和Strategy环境设计足够多的接口, 用心支持一系列的算法. 这样软件在维护的时候便不用为了新增一个算法而改变其它的Strategy和Strategy环境. 比如这里的Compositor子类(ArrayCompositor, TexCompositor, SimpleComsitor)就是一个个Strategy. 这些子类实现的算法足以支持对于文档物理结构的修改. 并且Compositor的接口也支持Composition启动格式化.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值