Policy策略

Policy:最基本的功能就是接收Request(请求),然后为提供相应的Command(命令),Command才是具体处理请求的。

 

EditPolicy:Policy的基础接口,所有的Policy都必须实现这个接口。Policy里面定义的方法基本上都常用,另外它还提供了一组特殊的方法:void showSourceFeedback(Request request),void showTargetFeedback(Request request)

void eraseSourceFeedback(Request request),void eraseTargetFeedback(Request request)。Feedback作为Policy最基本的能力,提供在EditPolicy中,也代表着所有的Request(请求)都可以看到一种与之对应的Feedback现象。

 

AbstractEditPolicy:它实现了两个接口EditPolicy和RequestConstants,RequestConstants里面存放着gef默认定义的Request(请求)类型。然后就是对EditPolicy接口做了一个空实现。尽管AbstractEditPolicy里面没有抽象方法,但是它依旧是一个抽象类。

 

ComponentEditPolicy:这个Policy主要用于处理删除子的请求,但是它响应两种处理请求:REQ_ORPHAN(子节点从当前父移到新的父中去)和REQ_DELETE(删除子节点)分别对应的命令是getDeleteCommand和getOrphanCommand

 

ConnectionEditPolicy:它是用来删除线的请求。

 

ContainerEditPolicy:这个Policy响应了四种请求,主要用于创建子节点的。

getCreateCommand:REQ_CREATE,响应创建请求。

getAddCommand:REQ_ADD,响应添加请求。

getCloneCommand:REQ_CLONE,响应克隆请求。

getOrphanChildrenCommand:REQ_ORPHAN_CHILDREN

 

GraphicalEditPolicy:这个主要是跟图形化界面相关的Policy,它有很多子。GraphicalEditPolicy对Feedback做了些简单的处理。这个类获取了getHostFigure,还有getLayer为在界面实现各种效果奠定了基础。

 

补充:因为删除是对自己的操作所以存在ComponentEditPolicy(节点)和ConnectionEditPolicy(线),而添加是对父容器的操作所以有ContainerEditPolicy并且是添加在父节点上。除了这些增加删除之类的操作,大部分就是对图像的外观的改变了,所以有了GraphicalEditPolicy。

 

GraphicalEditPolicy的子类:

ContainerHighlightEditPolicy:对一些常用的请求做了高亮处理,如果我们要有自己的一个这样的Policy,也可以仿照它扩展。

DirectEditPolicy:编辑节点的一个Policy,gef提供了一个默认实现供参考LabelDirectEditPolicy

DragGuidePolicy:gef实现内部功能Guide的策略。

GraphicalNodeEditPolicy:一个处理节点连线的Policy,提供处理四种请求的命令,开始连接,结束连接和源重连接,目标重连接。

LayoutEditPolicy:这个是跟布局息息相关的Policy,主要是响应孩子的添加,移动等请求。

ConstrainedLayoutEditPolicy:这个增加了Constrained约束,坐标以及大小以及布局都属于这个范畴。

XYLayoutEditPolicy:ConstrainedLayoutEditPolicy的子类,绝对定位布局的Policy

 

OrderedLayoutEditPolicy:这个跟文本编辑器相关

 

SelectionEditPolicy:响应选中的Policy

 

 

 

注意:一般Feedback都是在LayoutEditPolicy里面进行实现的,像ContainerEditPolicy之类的,都只是负责非界面化的东西。所有会在图形上有所表现的事情,都应该放到GraphicalEditPolicy或者它的子类中完成。

 

 

 

一篇很好的文章:

http://macrochen.iteye.com/blog/54403

 

 

你可能感兴趣的:(GEF)