★雪峰的Blog★

Learn Java, earn money!

用户操作
[即时聊天] [发私信] [加为好友]
XuefengID:asklxf
648665次访问,排名58,好友8人,关注者0人。
asklxf的文章
原创 191 篇
翻译 0 篇
转载 19 篇
评论 519 篇
Xuefeng的公告



新书上市:《Spring 2.0核心技术与最佳实践》!
查看目录
访问JavaEE开发网




自我介绍
Xuefeng北京邮电大学本科毕业,精通J2EE/J2ME,欢迎交流

最近评论
cs_xiaoxiao:很好,推荐!
cs_xiaoxiao:很好,推荐!
123:scions of fate
scions of fate gold
为什么阅读全文的链接是这个地址?http://www.crackj2ee.com/Article/ShowArticle.asp。是谁中毒了?
lujing_angelar:为什么阅读全文的链接是这个地址?http://www.crackj2ee.com/Article/ShowArticle.asp。是谁中毒了?
文章分类
收藏
相册
Books
Landscape
MSN
Personal
Java站点
JavaEE开发网(RSS)
Live在线书店
中华诗词
存档
软件项目交易
订阅我的博客
XML聚合  FeedSky

原创 Jexi设计 (4) 文档类设计收藏

新一篇: 在Eclipse中使用JUnit进行单元测试 | 旧一篇: Jexi设计 (3) MVC模型

文档类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评价讨论!

发表于 @ 2004年07月18日 18:24:00|评论(loading...)|编辑

新一篇: 在Eclipse中使用JUnit进行单元测试 | 旧一篇: Jexi设计 (3) MVC模型

评论

#Eric Hu 发表于2004-07-19 20:49:00  IP: 218.79.172.*
对啊申请啊,就叫做jexi
以后就有了 jexi.sourceforge.net
还可以用cvs把文件传上去。。。


关键是设计。。。最好写个目的(motivation)
#Eric Hu 发表于2004-07-19 08:49:00  IP: 218.79.162.*
你做的东西挺有意思,希望你能在sourceforge上放一个opensource的项目,大家都可以学习啊。。。

#Eric Hu 发表于2004-07-19 22:11:00  IP: 218.79.175.*
好好写,没准下一版的design pattern就把这个东西收录进去了

多和大家讨论讨论
#Xuefeng 发表于2004-07-19 22:30:00  IP: 218.106.169.*
这个申请太麻烦了,我决定还是直接放在网站上得了
#Xuefeng 发表于2004-07-19 12:34:00  IP: 211.154.1.*
怎么放上去?申请就行?
#cjsh 发表于2004-07-20 20:36:00  IP: 218.104.236.*
今天看到你要写这个,让我又想去试读"设计模式可复用面向对象软件的基础"因为以前不熟悉OOP看这本书看不懂,现在对OOP已经有一定的了解了,不知道这次是否可以看懂了,希望能够看得懂。
发表评论  


登录
Csdn Blog version 3.1a
Copyright © Xuefeng