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