GEF 框架中的设计模式
2010-06-07 00:00:00 来源:WEB开发网核心提示: 状态 (State)同职责链模式一样,状态 (State) 也是一种对象行为型模式,GEF 框架中的设计模式(8),状态模式允许一个对象在其内部状态改变时改变它的行为,上下文 (context) 把状态相关的行为委托到状态对象上,工具 (Tool) 对应状态,一旦 Active Tool 改变,
状态 (State)
同职责链模式一样,状态 (State) 也是一种对象行为型模式。状态模式允许一个对象在其内部状态改变时改变它的行为。上下文 (context) 把状态相关的行为委托到状态对象上。对象通过上下文引用不同的状态对象,在运行时根据状态改变它的行为。关于状态模式更详细的描述,请参考 GOF 《设计模式》一书。
在 GEF 的编辑器中,用户在选项板 (Palette) 切换工具可以改变编辑器的状态,从而修改编辑器的行为。例如,对于鼠标按下事件,编辑器在激活选区工具和激活创建工具下的行为是截然不同的。现在,我们就来看一下 GEF 编辑器是如何根据当前选中的 Tool 来改变行为的。
在每个 GEF 的 Editor 里,都需要有一个 EditDomain 的存在。EditDomain 类似于 GraphicalEditor 的执行上下文环境,维护着 GEF 中的命令栈、负责事件通知等。在 EditDomain 中,通过 setActiveTool 可以设置当前处于 Active 状态的 Tool。
EditDomain 类维护一个表示鼠标和键盘输入的工具对象 ( 一个 Tool 接口实现类的实例 )。EditDomain 类将所有与视图输入相关的请求委托给这个工具对象。EditDomain 类使用 Tool 接口实现类的实例来执行特定于视图输入的操作。在状态模式中,EditDomain 对应上下文环境,工具 (Tool) 对应状态。一旦 Active Tool 改变,EditDomain 对象就会改变它所使用的工具对象。
图 6. Tool 继承层次图 (images/tool_hierarchy.jpg)
查看原图(大图)
更多精彩
赞助商链接