GEF 框架中的设计模式
2010-06-07 00:00:00 来源:WEB开发网职责链 (Chain of Responsibility)
职责链是一种对象行为型模式。请求发出后,将在候选对象链 ( 职责链 ) 中进行传递,并有满足条件的对象进行处理。职责链模式降低了请求的发送者和接收者之间的耦合度,允许在运行时对职责链进行动态的增加或修改以增加或改变处理请求的职责。关于职责链模式更详细的描述,请参考 GOF 《设计模式》一书。
在 GEF 中,Tools 或者其他的 UI 解释程序将用户的编辑操作转换为一系列的请求 (Request),比如,用户在选项板 (Palette) 里选择了创建节点工具 (CreationTool),然后在画布区域按下鼠标左键,这时产生在画布上的鼠标单击事件将被 CreationTool 转换为一个 CreateRequest,它里面包含了要创建的对象,坐标位置等信息。
GEF 已经为我们提供了很多种类的 Request,其中最常用的是 CreateRequest 及其子类 CreateConnectionRequest,下图列出了 GEF 中已经实现的 Request.
图 5. Request 子类 (images/request_type_hierarchy.jpg)
Editparts 不能直接处理编辑操作产生的 Request,而是通过安装的对应 EditPolicy 来处理。EditPolicy 的主要功能是根据请求创建相应的命令 (Command),而后者会直接操作模型对象。每个 EditPolicy 专注于一个单一的编辑任务或相关任务组,这使得一些编辑操作可以在不同 EditPart 实现共享。EditPolicies 决定了一个 EditPart 的编辑能力。
EditPart 在创建时,调用方法 createEditPolicies() 来安装一些适用的编辑策略。在示例代码中,ConnectionEditPart 安装了两个 EditPolicy。第一个是 ConnectionComponentPolicy,它给 Delete 菜单项所需要的 action 提供删除命令。第二个是 ConnectionEndpointEditPolicy,用来提供连接 (Connection) 转移的策略。
更多精彩
赞助商链接