Jexi设计 (4) 文档类设计
2004-07-18 18:24
232 查看
文档类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评价讨论!
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评价讨论!
相关文章推荐
- 内核流驱动设计向导(翻译自ddk帮助文档)第一章 内核流总览
- Hadoop中HDFS文件系统的Append/Hflush/Read设计文档(HDFS-265:Revisit append)
- Puyo-Puyo设计文档
- 应该如何写详细设计文档
- Java课程设计-文档相似性检查系统(完整)测试版
- Visio如何反向导出数据库设计文档
- 20169205 项目进度三 文件资源管理器接口设计文档
- 详细设计文档格式
- 文档驱动式代码设计器——代码是设计出来的!
- 翘课老黄历——设计文档
- Qt多文档界面应用设计
- 官方文档:Android应用程序运行的性能设计
- 如何解决设计与研发的文档管理问题,保证文件安全?
- 基于UDP协议和GTK+用户界面的Linux Socket端到端通信程序设计 详细设计文档
- 为Office文档添加Windows窗体控件:在设计时添加控件
- 现代架构设计文档的编写
- 黑马程序员——Java基础之面向对象(二)文档注释与设计模式
- C# ASP.NET 走火入魔通用权限管理系统组件V3.2试用版下载地址【含数据库设计文档、使用手册】
- 韩顺平_轻松搞定网页设计(html+css+javascript)_第29讲_二维数组转置_js面向对象编程介绍 类(原型对象)和对象_学习笔记_源代码图解_PPT文档整理
- 韩顺平_轻松搞定网页设计(html+css+javascript)_第31讲_this关键字详解_学习笔记_源代码图解_PPT文档整理