- 浏览: 185402 次
- 性别:
- 来自: 长沙
文章分类
最新评论
-
LXX516:
LXX516 写道你好,运行时出现如下问题:E/Trace(1 ...
PC客户端与Android实现图片传送 -
LXX516:
你好,运行时出现如下问题:E/Trace(15019): er ...
PC客户端与Android实现图片传送 -
huzhenyu:
希望各位大顶起,支持国产免费软件
公式编辑器MathMarkEdit1.0发布 -
zhangyou1010:
默认是8000的端口,如果用sh catalina.sh jp ...
使用eclipse远程调试部署在tomcat上的应用程序 -
zhangyou1010:
有时间,也要玩玩QT,哈哈。
Qt Grid布局
基于Eclipse GEF关键技术的分析与研究
2.Draw2D技术
轻量级框架:轻量级框架[LightweightSystem类]把SWT和Draw2D 连接起来,它把鼠标事件和画图事件从SWT 转发给Draw2D的图形上。它是Draw2D的核心类。
LightweightSystem 主要包含三个组成部件:
1.根图形[The root figure]: 根图形是RootFigure类的实例,应用程序的根图形必须建立在它之上。它继承了一些SWT Canvas的图形环境,如颜色,字体等。
2.事件转发器[The event dispatcher]: 事件转发器把SWT事件转换成相应Draw2D事件。它可以跟踪那个图形被聚焦,那个图形是被鼠标点击的目标图形。它还控制tooltip的激活。它为想捕捉鼠标的图形提供支持。
3.更新管理器[The update manager]:更新管理器是负责画和更新Draw2D图形。当一个画的请求被事件转发器从SWT canvas发送到LightweightSystem上时,LightweightSystem调用更新管理器performUpdate()方法。一般管理器维持着一个List列表,该列表包含无效的或需要重画的图形。
图形:[Figure类]是所有在Draw2D用户界面中看到的都是图形。它在一个重量级的窗口中模拟一个重量级图形系统。在不消耗太多系统资源情况下,他们允许你创建一个复杂的图形展示。图形都应该建立在根图形之上。
图形的生命周期中,主要的过程是绘制和验证。
绘制:Draw2D要求图形负责自己的绘制,通过调用paint()完成,其绘制过程是:
1.paintfigure() 图形绘制本身
2.paintclientarea() 绘制该图形的子图形
3.paintborder() 绘制该图形的修饰边框
验证:当图形的大小或位置需要被计算时(如图形的位置发生变化时),Draw2D将使用验证。
1.validate( ) 要求图形的布局管理器重新布局它的子图形。
2.revalidate( ) 首先调用invalidate( )方法(该方法会使该图形及其父链上的图形无效),其次,添加该图形及其父链到更新管理器的无效List上。
3.MVC
GEF的优势是提供了标准的MVC(Model-View-Control)结构。与其他的一些MVC框架相比,GEF的一个主要设计目标是尽量减少模型和视图之间的依赖,好处是可以根据需要选择任意模型和视图的组合,而不必受开发框架的限制。
GEF中MVC框架的实现:
1.控制器[EditParts]:控制器是GEF中的核心元素,相当于MVC框架中的Controler,它们具体控制着模型元素到图形的映射,即把模型与相应得图形对应起来,并实现模型与图形的相互作用。一般应该为每个模型元素创建对应的控制器,因此它们将有和模型元素相对应的类层次结构。
程序员可以继承三种EditPart,分别是
org.eclipse.gef.editparts.AbstractGraphicalEditPart
org.eclipse.gef.editparts.AbstractConnectionEditPart
org.eclipse.gef.editparts.AbstractTreeEditPart
前两个是为了在编辑器[EditorPart]中用到,分别表示图形和图形之间的连线用。最后一个是在大纲[Outline]中用到。
下面我们将关注一下控制器的生命周期:
控制器是在编辑器中通过工厂类创建的,该工厂根据不同的模型元素创建相应的控制器。控制器创建后并不是立刻可见或处在激活状态。当GEF框架得知控制器需要被激活时,控制器将处在激活的状态。如果某个控制器不被需要时(如编辑器被关掉或用户删除控制器对应的模型),控制器将处在不激活的状态。两个方法 EditPart#activate和EditPart#deactivate分别对应上述过程。还有一个方法EditPart#isActive,将总是返回控制器的当前状态。
2.模型[Model]:模型保存着业务逻辑,是GEF这中唯一可以持久化的部分。为了能让控制器知道模型的变化,应该把控制器作为事件监听者注册在模型中,当模型发生变化时,就出发相应的事件给控制器,后者负责通知各个视图更新。
3.视图[Figure]:GEF提供了在EclipseWorkbench中使用Viewer,称为EditPartViewer。它的作用和 jface中的 Viewer很相,不过这时候它的ContentProvider和LabelProvider是EditPart,通过setContents设置模型对象的根。EditPartViewer可以适配到任何一个SWT控件,因为它要求有createControl方法,接受一个父SWT控件作为适配对象,从而将 GEF生成的Figure对象显示在这个SWT控件上,因此GEF可以使用任何图形包,不过GEF提供了对Draw2D的默认实现。
4.编辑器[EditorPart]:在这里不得不介绍一下编辑器,因为一般都是由编辑器来组装GEF的MVC。GEF的编辑器类是Eclipse编辑器的一个子类。在介绍编辑器之前先介绍几个GEF中的概念:
编辑域[EditDomain] :编辑域是一个起到管理作用的类,它绑定了一个编辑器、若干个查看器和若干个工具。因此它定义了真实的编辑器。编辑域还提供一个命令堆栈,用来保存所有执行过的命令,有两点好处:1.可实现重做和不做的操作2.可查看模型是否被改动。
工具[Tool] :状态对象,根据当前的状态和它所接受的事件来产生相应的请求并传递给控制器。
调色板[palette] :调色板是位于编辑器中的一个特定的查看器[Viewer],工具放在它上面。
编辑器主要实现以下功能 :
1.需要创建EditDomain。
2.通过EditDomain,访问命令堆栈,为编辑器提供参考[如参考命令堆栈,编辑器决定是否允许存储操作]。
3.实现存储功能。
4.装配图形查看器[GraphicalViewer]。
5.装配调色板[palette]。
6.实现大纲[Outline]的挂接等等。
总结:编辑器利用工厂[EditPart Factory]根据模型创建对应的控制器[EditParts]。在控制器中通过它的设置图形方法来把EditPart与图形对应起来,这样模型、控制器和图形就一一对应了。
4.反馈技术
视觉反馈是一个图形化编辑器用户界面重要的组成部分。GEF用很多方法为用户提供反馈。
1.改变光标。当在图形化编辑器上选定目标时,改变光标来显示所选的目标是否支持该工具的操作。
2.区别被选的和被聚焦的部分。一般的,在相同类型的部分中,一个被选择的部分应该和没有被选择的部分明显的区分。这个可以通过在部分外增加一个被选择图形或改变部分的颜色或形状。
3.展示操作柄[handle]:操作柄也是一个图形元素,一般出现在部分的四周,它表示图形可以被移动或是改变大小。
一般反馈技术是由编辑策略[EditPolicy]实现的。具体实现的是EditPolicy的子类GraphicalEditPolicy。GEF提供一个反馈层,所有的反馈都在该层上显示。层本身就是一个图形,只不过对用户来说是透明的。
下面介绍一下支持反馈的EditPolicy :
1.SelectionEditPolicy :一个抽象类,它是提供控制器被选择的反馈基础。即当用户在编辑器上选中图形时,相应的图形给以相应的反应以区分选中的和未选中的。要注意的反馈图形被画在反馈层上[LayerConstants.FEEDBACK_LAYER]。有如下方法包括在该类中:
Protected void showFocus()
Protected abstract void showSelection()
protected void showPrimarySelection()
protected void showFocus()
protected abstract void hideSelection()
这几个方法的英文名字表示了它们的含义,这里就不再一一介绍。
2.SelectionHandlesEditPolicy :这个类继承了SelectionEditPolicy,它提供个带控制点[handle]的选择反馈。子类提供了一个控制点的List,该List将修饰被选择的[控制器对应的]图形。GEF中提供了如下继承SelectionHandlesEditPolicy的子类:
1.BendpointEditPolicy :这个类在实现带弯点的连接时,被连接的控制器调用。
2.ConnectionEndpointEditPolicy :在连接的两端展示控制点。
3.NonResizableEditPolicy :阻止用户改变图形大小,并在被选图形上添加一格简单的黑框和在四个边角处设置四个黑色小方框。如图1所示。用户可以改变图形的位置。
图1 图2
4.ResizableEditPolicy :这个类继承NonResizableEditPolicy,在图形的四周添加八个黑色小方框,用来增加改变图形大小功能。如图2所示。
2.GraphicalNodeEditPolicy :这个类提供关于连接的反馈。当用户建立连接,从一个端点拖向另一个端点,GEF通过该类模拟一个连接。这模拟的连接被画在反馈层,它将连接到控制器提供的锚点[Anchor]。
3.LayoutEditPolicy :这是一个抽象类,它用布局管理器[LayoutManager]来放置它的子控制器图形。该类应该提供反馈,一个新元素放到该类对应的图形中的反馈。注意,这里该类对应的图形应该是一个容器图形,即该图形包含子图形。关键方法如下:
1.showLayoutTargetFeedback :这个方法展示当前的操作将放图形在什么位置的反馈。
2.getSizeOnDropFeedback :展示将新建图形的大小。
5.拖拽技术
在现代的应用程序中,程序要实现的一个最重要功能就是拖拽。该部分将讨论GEF中的拖拽技术。
为了使用户在GEF应用中实现拖拽更加容易,GEF本身提供了一些类和概念。例如,你不需要处理SWT的拖拽源对象[DragSource]和其他低级别的对象。
在GEF中,用户需要实现的就是向编辑查看器[EditPartViewwe]添加拖拽源监听者[TransferDragSourceListener]和拖拽目标监听者[TransferDrogTargetListener]。前者的可以使编辑查看器成为拖拽源,即支持用户从该编辑查看器中往出拽,而后者可以使编辑查看器成为拖拽目标,即支持用户向该编辑查看器里拖。
当在GEF应用中为查看器实现拖拽监听者时,要确保该类继承的父类来自于GEF框架。
拖拽原理:当用户在支持拖拽源的查看器上拽出时,GEF框架产生一个相应的模版对象,该对象将从框架中获得用户想要创建对象的类信息。当用户在支持拖拽目标的查看器上松开鼠标时,拖放结束的事件将产生,TemplateTransferDropTargetListener对象将根据模版对象创建相应的实例。
用户一般需要实现3个类 :
TemplateTransferDropTargetListener :是TransferDrogTargetListener的子类。
TemplateTransferDragSourceListener :是TransferDragSourceListener的子类。
CreationFactory :用来根据Template返回相应的对象。
2.Draw2D技术
轻量级框架:轻量级框架[LightweightSystem类]把SWT和Draw2D 连接起来,它把鼠标事件和画图事件从SWT 转发给Draw2D的图形上。它是Draw2D的核心类。
LightweightSystem 主要包含三个组成部件:
1.根图形[The root figure]: 根图形是RootFigure类的实例,应用程序的根图形必须建立在它之上。它继承了一些SWT Canvas的图形环境,如颜色,字体等。
2.事件转发器[The event dispatcher]: 事件转发器把SWT事件转换成相应Draw2D事件。它可以跟踪那个图形被聚焦,那个图形是被鼠标点击的目标图形。它还控制tooltip的激活。它为想捕捉鼠标的图形提供支持。
3.更新管理器[The update manager]:更新管理器是负责画和更新Draw2D图形。当一个画的请求被事件转发器从SWT canvas发送到LightweightSystem上时,LightweightSystem调用更新管理器performUpdate()方法。一般管理器维持着一个List列表,该列表包含无效的或需要重画的图形。
图形:[Figure类]是所有在Draw2D用户界面中看到的都是图形。它在一个重量级的窗口中模拟一个重量级图形系统。在不消耗太多系统资源情况下,他们允许你创建一个复杂的图形展示。图形都应该建立在根图形之上。
图形的生命周期中,主要的过程是绘制和验证。
绘制:Draw2D要求图形负责自己的绘制,通过调用paint()完成,其绘制过程是:
1.paintfigure() 图形绘制本身
2.paintclientarea() 绘制该图形的子图形
3.paintborder() 绘制该图形的修饰边框
验证:当图形的大小或位置需要被计算时(如图形的位置发生变化时),Draw2D将使用验证。
1.validate( ) 要求图形的布局管理器重新布局它的子图形。
2.revalidate( ) 首先调用invalidate( )方法(该方法会使该图形及其父链上的图形无效),其次,添加该图形及其父链到更新管理器的无效List上。
3.MVC
GEF的优势是提供了标准的MVC(Model-View-Control)结构。与其他的一些MVC框架相比,GEF的一个主要设计目标是尽量减少模型和视图之间的依赖,好处是可以根据需要选择任意模型和视图的组合,而不必受开发框架的限制。
GEF中MVC框架的实现:
1.控制器[EditParts]:控制器是GEF中的核心元素,相当于MVC框架中的Controler,它们具体控制着模型元素到图形的映射,即把模型与相应得图形对应起来,并实现模型与图形的相互作用。一般应该为每个模型元素创建对应的控制器,因此它们将有和模型元素相对应的类层次结构。
程序员可以继承三种EditPart,分别是
org.eclipse.gef.editparts.AbstractGraphicalEditPart
org.eclipse.gef.editparts.AbstractConnectionEditPart
org.eclipse.gef.editparts.AbstractTreeEditPart
前两个是为了在编辑器[EditorPart]中用到,分别表示图形和图形之间的连线用。最后一个是在大纲[Outline]中用到。
下面我们将关注一下控制器的生命周期:
控制器是在编辑器中通过工厂类创建的,该工厂根据不同的模型元素创建相应的控制器。控制器创建后并不是立刻可见或处在激活状态。当GEF框架得知控制器需要被激活时,控制器将处在激活的状态。如果某个控制器不被需要时(如编辑器被关掉或用户删除控制器对应的模型),控制器将处在不激活的状态。两个方法 EditPart#activate和EditPart#deactivate分别对应上述过程。还有一个方法EditPart#isActive,将总是返回控制器的当前状态。
2.模型[Model]:模型保存着业务逻辑,是GEF这中唯一可以持久化的部分。为了能让控制器知道模型的变化,应该把控制器作为事件监听者注册在模型中,当模型发生变化时,就出发相应的事件给控制器,后者负责通知各个视图更新。
3.视图[Figure]:GEF提供了在EclipseWorkbench中使用Viewer,称为EditPartViewer。它的作用和 jface中的 Viewer很相,不过这时候它的ContentProvider和LabelProvider是EditPart,通过setContents设置模型对象的根。EditPartViewer可以适配到任何一个SWT控件,因为它要求有createControl方法,接受一个父SWT控件作为适配对象,从而将 GEF生成的Figure对象显示在这个SWT控件上,因此GEF可以使用任何图形包,不过GEF提供了对Draw2D的默认实现。
4.编辑器[EditorPart]:在这里不得不介绍一下编辑器,因为一般都是由编辑器来组装GEF的MVC。GEF的编辑器类是Eclipse编辑器的一个子类。在介绍编辑器之前先介绍几个GEF中的概念:
编辑域[EditDomain] :编辑域是一个起到管理作用的类,它绑定了一个编辑器、若干个查看器和若干个工具。因此它定义了真实的编辑器。编辑域还提供一个命令堆栈,用来保存所有执行过的命令,有两点好处:1.可实现重做和不做的操作2.可查看模型是否被改动。
工具[Tool] :状态对象,根据当前的状态和它所接受的事件来产生相应的请求并传递给控制器。
调色板[palette] :调色板是位于编辑器中的一个特定的查看器[Viewer],工具放在它上面。
编辑器主要实现以下功能 :
1.需要创建EditDomain。
2.通过EditDomain,访问命令堆栈,为编辑器提供参考[如参考命令堆栈,编辑器决定是否允许存储操作]。
3.实现存储功能。
4.装配图形查看器[GraphicalViewer]。
5.装配调色板[palette]。
6.实现大纲[Outline]的挂接等等。
总结:编辑器利用工厂[EditPart Factory]根据模型创建对应的控制器[EditParts]。在控制器中通过它的设置图形方法来把EditPart与图形对应起来,这样模型、控制器和图形就一一对应了。
4.反馈技术
视觉反馈是一个图形化编辑器用户界面重要的组成部分。GEF用很多方法为用户提供反馈。
1.改变光标。当在图形化编辑器上选定目标时,改变光标来显示所选的目标是否支持该工具的操作。
2.区别被选的和被聚焦的部分。一般的,在相同类型的部分中,一个被选择的部分应该和没有被选择的部分明显的区分。这个可以通过在部分外增加一个被选择图形或改变部分的颜色或形状。
3.展示操作柄[handle]:操作柄也是一个图形元素,一般出现在部分的四周,它表示图形可以被移动或是改变大小。
一般反馈技术是由编辑策略[EditPolicy]实现的。具体实现的是EditPolicy的子类GraphicalEditPolicy。GEF提供一个反馈层,所有的反馈都在该层上显示。层本身就是一个图形,只不过对用户来说是透明的。
下面介绍一下支持反馈的EditPolicy :
1.SelectionEditPolicy :一个抽象类,它是提供控制器被选择的反馈基础。即当用户在编辑器上选中图形时,相应的图形给以相应的反应以区分选中的和未选中的。要注意的反馈图形被画在反馈层上[LayerConstants.FEEDBACK_LAYER]。有如下方法包括在该类中:
Protected void showFocus()
Protected abstract void showSelection()
protected void showPrimarySelection()
protected void showFocus()
protected abstract void hideSelection()
这几个方法的英文名字表示了它们的含义,这里就不再一一介绍。
2.SelectionHandlesEditPolicy :这个类继承了SelectionEditPolicy,它提供个带控制点[handle]的选择反馈。子类提供了一个控制点的List,该List将修饰被选择的[控制器对应的]图形。GEF中提供了如下继承SelectionHandlesEditPolicy的子类:
1.BendpointEditPolicy :这个类在实现带弯点的连接时,被连接的控制器调用。
2.ConnectionEndpointEditPolicy :在连接的两端展示控制点。
3.NonResizableEditPolicy :阻止用户改变图形大小,并在被选图形上添加一格简单的黑框和在四个边角处设置四个黑色小方框。如图1所示。用户可以改变图形的位置。
图1 图2
4.ResizableEditPolicy :这个类继承NonResizableEditPolicy,在图形的四周添加八个黑色小方框,用来增加改变图形大小功能。如图2所示。
2.GraphicalNodeEditPolicy :这个类提供关于连接的反馈。当用户建立连接,从一个端点拖向另一个端点,GEF通过该类模拟一个连接。这模拟的连接被画在反馈层,它将连接到控制器提供的锚点[Anchor]。
3.LayoutEditPolicy :这是一个抽象类,它用布局管理器[LayoutManager]来放置它的子控制器图形。该类应该提供反馈,一个新元素放到该类对应的图形中的反馈。注意,这里该类对应的图形应该是一个容器图形,即该图形包含子图形。关键方法如下:
1.showLayoutTargetFeedback :这个方法展示当前的操作将放图形在什么位置的反馈。
2.getSizeOnDropFeedback :展示将新建图形的大小。
5.拖拽技术
在现代的应用程序中,程序要实现的一个最重要功能就是拖拽。该部分将讨论GEF中的拖拽技术。
为了使用户在GEF应用中实现拖拽更加容易,GEF本身提供了一些类和概念。例如,你不需要处理SWT的拖拽源对象[DragSource]和其他低级别的对象。
在GEF中,用户需要实现的就是向编辑查看器[EditPartViewwe]添加拖拽源监听者[TransferDragSourceListener]和拖拽目标监听者[TransferDrogTargetListener]。前者的可以使编辑查看器成为拖拽源,即支持用户从该编辑查看器中往出拽,而后者可以使编辑查看器成为拖拽目标,即支持用户向该编辑查看器里拖。
当在GEF应用中为查看器实现拖拽监听者时,要确保该类继承的父类来自于GEF框架。
拖拽原理:当用户在支持拖拽源的查看器上拽出时,GEF框架产生一个相应的模版对象,该对象将从框架中获得用户想要创建对象的类信息。当用户在支持拖拽目标的查看器上松开鼠标时,拖放结束的事件将产生,TemplateTransferDropTargetListener对象将根据模版对象创建相应的实例。
用户一般需要实现3个类 :
TemplateTransferDropTargetListener :是TransferDrogTargetListener的子类。
TemplateTransferDragSourceListener :是TransferDragSourceListener的子类。
CreationFactory :用来根据Template返回相应的对象。
发表评论
-
解决Android Manager不能更新问题
2012-10-14 15:56 1000估计这又是伟大GFW的功劳,我们只需要配置一下hosts文件, ... -
Eclipse中Action创建的两种方式
2011-04-25 11:03 6818在Eclipse里,是由actions来描述菜单及工具栏的可以 ... -
改变swt中table选中行的颜色
2011-03-07 16:17 6280import org.eclipse.swt.*; impo ... -
menu显示在特定视图中
2010-08-17 10:41 917<visibleWhen checkEnabled=&q ... -
rcp中获取bundle中资源文件的两种方法
2010-07-15 12:53 1826Bundle bundle = Platform.getBun ... -
去掉eclipse上的菜单
2010-07-12 13:08 1116WorkbenchWindow window = (Workb ... -
eclipse rcp显示/隐藏视图
2010-07-08 16:45 2220/** * 显示视图 * @param id 视图ID ... -
RCP 视图最大化
2010-07-08 16:42 1515findLeftViewStack(CurrentDealVi ... -
Riena
2010-07-07 23:41 1029Riena平台将是建立多层C/S企业应用的基础。通过提供一种透 ... -
rcp text combo 仿google检索效果
2010-06-24 13:02 1014http://ncu.dl.sourceforge.net/p ... -
eclipse rcp popup menu
2010-06-17 23:02 2246在做RCP开发中遇到个问题,搞了大半天。代码贴出来: view ... -
分享两个不错的基于RCP的开源项目
2010-06-08 16:29 1844http://sourceforge.net/projects ... -
eclipse jdt初探
2010-06-03 23:30 1269最近打算了解下jdt,以便以后做些代码辅助工具 下面记一些代码 ... -
RCP中实现截屏
2010-06-02 22:53 922http://www.java2s.com/Tutorial/ ... -
SWT中创建一个可以可拖曳的图片且实现滚动条跟随
2010-06-02 22:16 1421/****************************** ... -
怎样基于eclipse做一个进度条
2010-06-01 22:37 2599代码: package rcpmail; import ... -
eclipse3.2版以外3.3,3.4,3.5汉化安装
2010-05-31 20:09 1587很多喜欢eclipse的朋友,比较关心eclipse是不是能汉 ... -
eclipse插件及rcp国际化实现
2010-05-22 11:50 1313方式一: package test; import ja ... -
eclipse实用插件集
2010-05-22 11:21 1697FengShen_Xia 2009-03-05 1 ... -
OSGI 伙伴类加载器
2010-05-16 11:59 1076伙伴类加载器选项 首先为 Hibernate 创建插件。然后 ...
相关推荐
eclipse GEF的官方教程,适合初学者
通过简单易懂的方式,介绍了Eclipse GEF 框架原理。对GEF开发有极大的好处/
安装m2eclipse插件时会依赖gef插件和svn插件,压缩包内包含m2eclipse + gef + svn的全部插件安装包,可以直接离线安装,本人亲测,在Eclipse3.7下安装成功,可以新建Maven项目。 需要注意的是,在离线安装时,切记...
eclipse gef 插件 最新版本
eclipse gef插件 绝对能用
eclipse 3.2下的gef,ve,gmf,经过自己的收集,把三个都收集齐了,一并传上,希望对大家有用
GEF入门实例代码2《Eclipse插件开发》中实例
Eclipse的GEF插件,支持J2SE手动添加控件!
开发eclipse插件,使用GEF的demo。开发组件,并用流程编辑器拖拽组件。最后解析成Java代码,然后打包成可执行jar。
eclipse插件 GEF-SDK-3.4.0.zip
Eclipse的图形编辑框架GEF的参考API,chm格式
eclipse gef example 例子 包括flow,logic,shapes,text四部分
eclipse gef原理的详细介绍PPT,很有参考价值。GEF是实现MVC模式的经典架构。
eclipse3.4的可视化开发GEF eclipse3.4的可视化开发GEF eclipse3.4的可视化开发GEF
Eclipse的GEF插件,GEF-ALL-3.5.0.zip
eclipse gef,ve,emf图形界面插件下载 emf-sdo-runtime-2.2.0.zip GEF-runtime-3.2.zip VE-SDK-1.2.1.zip 安装方式:在eclipse目录下创建两个子目录myplugins和links,然后在myplugins目录下建三个子目录emf,...
基于GEF框架的SVG制作工具设计与实现
eclipse图形开发必备插件,可以 用来给用户提供图形化编辑模型的功能,从而提升用户体验,典型的应用如图形化的流程设 计器、UML类图编辑器等等