Jexi设计 (4) 文档类设计

原创 2004年07月18日 18:24:00

文档类Document需要解决的三个问题:

1.?文档数据如何存储:

为了表示文档的层次结构而非显示结构,使用Composite模式,借用GoF的设计,定义接口Glyph,抽象出以下类:

  • Char类:表示一个字符。
  • Picture类:表示一个图片。
  • Paragraph类:由若干个Char和Picture组成的段落,用ArrayList : glyphs存储Char和Picture。

Document类只需要保持一个ArrayList : paragraphs就能访问所有的Paragraph,进而访问任意一个Char或Picture。层次如下:

以上解决了文档的基本数据如何在内存中保存的问题。

2.?文档如何显示:

对于图文混排,要实现“所见即所得”,就需要将上面的基本数据按照一定格式排版,最后渲染到窗口的显示区域中去。对于排版,抽象出以下类:

  • Row类:表示一行,每个Row对象能知道它包含的Char和Picture对象。
  • Page类:表示一页,每个Page对象能知道它包含的Row对象。

层次结构如下:

这样Document类只需要保持一个ArrayList : pages就能知道它包含和显示哪些页,每个Page对象包含一个ArrayList : rows,于是View就能显示出需要显示的Page和Row。

3. 如何排版:

用户的插入或删除操作都会直接导致表示基本数据的Paragraph的修改,此时需要从合适的地方开始重新排版,也就是重新生成Page,Row对象,或者修改现有的Page,Row对象。

排版的过程为:从受影响的Paragraph开始,根据排版算法重新生成必要的Row,然后根据生成的Row组装出新的Page对象:

以上是我的基本想法,主要是把文档数据分成两类:一是基本数据,用于文档的逻辑结构,不包含任何显示逻辑;二是显示模型,根据文档的逻辑结构调用排版算法,生成文档的显示模型,这样以后能添加新的基本元素比如文本框而不影响显示模型,显示模型也能添加新的元素如Column实现分栏显示而不影响逻辑模型,欢迎各位Blogger评价讨论!

Jexi设计 (6) View设计

以下讨论View的设计。 Document是抽象的文档类,它包含了所有的数据和如何显示的信息,我们已经通过Page,Paragraph,Row等等抽象出来了。 Frame代表窗体对象,负责构造出窗体,...
  • asklxf
  • asklxf
  • 2004年07月27日 19:25
  • 3665

C++基础::类设计的几大原则

普通成员函数与虚函数在一个抽象基类的内部可以有三种形式成员函数: 普通成员函数 所有派生类共享的函数实现,可以不给出实现(其实这样做没有意义),但当调用时自然会发生解析错误。 虚函数 必须给出实现...
  • lanchunhui
  • lanchunhui
  • 2015年11月10日 17:46
  • 1264

Jexi设计 (10) 坐标转换

坐标转换(修订)视图保存(offsetX, offsetY),表示文档相对于视图的起始坐标。文档在绘制时需要这个起始坐标(offsetX, offsetY),表示整个文档应该从此处绘制。上图中:vie...
  • asklxf
  • asklxf
  • 2004年08月03日 00:32
  • 3567

Jexi设计 (2) 用户需求

Jexi计划实现一个所见即所得的图文混排的编辑器,支持以下功能: 基本功能:文字录入,复制粘贴,删除,查找替换,打印等基本编辑操作。 扩展功能:图文混排,打印预览,多步Redo/Undo等。 暂不考虑...
  • asklxf
  • asklxf
  • 2004年07月16日 19:15
  • 4187

Jexi设计 (6) Document类的UML

前面讨论了用Document类表示MVC结构中的文档,并抽象出接口Glyph用于Composite模式,派生两类Glyph:基本数据结构Char,Picture和Paragraph;显示模型结构Row...
  • asklxf
  • asklxf
  • 2004年07月24日 00:17
  • 4248

XXX数据仓库分析模型设计文档

 原创于2007年02月11日,2009年10月15日迁移至此。 本文提供了一个数据仓库项目的分析模型设计文档,仅供参考! XXX分析模型说明目 录1 共享数据表结构描述 32 X...
  • baoqiangwang
  • baoqiangwang
  • 2009年10月15日 23:30
  • 1547

如何写详细设计文档

如何写详细设计文档是一个很头疼的话题,简单的说是需求文档的升华,也可以说是开发人员开发程序的依据,当然根据详细设计文档的粒度进行。好的详细设计文档是需求人员和开发人员之间的桥梁,不过目前好多程序开发都...
  • vbloveshllm
  • vbloveshllm
  • 2014年03月27日 14:08
  • 14427

权限设计文档

 权限设计文档权限设计通常包括数据库设计、应用程序接口(API)设计、程序实现三个部分。这三个部分相互依存,密不可分,要实现完善的权限管理体系,必须考虑到每一个环节可行性与复杂程度甚至执行效率。   ...
  • shuijinglianyi
  • shuijinglianyi
  • 2008年04月11日 16:56
  • 5511

设计模式之单例模式(卷三)

确保系统中只有唯一一个实例,当这个唯一实例创建成功之后,我们无法再创建一个同类型的其他对象,所有的操作都只能基于这个唯一实例。 主要步骤 1. 构造器私有化。 2. 定义一个private私有...
  • z3jjlzt
  • z3jjlzt
  • 2018年01月07日 13:11
  • 9

设计模式单例模式(SingletonPattern)

核心模块: 所有代码请访问:git@code.aliyun.com:289804201/PatternLearn.git 使用场景:只需要一个实例对象,需要频繁创造销毁的对象,...
  • didiao11300
  • didiao11300
  • 2018年01月11日 21:52
  • 31
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Jexi设计 (4) 文档类设计
举报原因:
原因补充:

(最多只允许输入30个字)