从今天开始准备正式写Jexi编辑器,目标就是《设计模式》中的C++例子Lexi:一个图文混排的所见即所得编辑器:
今天在公司闲的时候把《design patterns》的Lexi设计部分仔细看了一遍,整理了一下GoF的设计:
文档结构 :应用Composite模式,如图:
通过接口Glyph,应用Composite模式,将多个对象组织起来:
文档格式 :通过一系列Formatting Algorithm来实现Formatting,这是由Composite和Composition实现的:
Responsibility Operationswhat to format |
void SetComposition(Composition*)
|
when to format |
virtual void Compose()
|
用户界面 :边框,滚动条等都是通过decorator模式动态装饰的:
Redo/Undo功能 :这是通过Command模式实现的,《design patterns》中有详细讲解,至于其他功能,如平台无关窗口,界面风格切换,拼写检查等暂时就不考虑了。
不幸的是,GoF只给了设计思想,没有现成的代码,所以一切还得靠自己。