|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
最后我再次声明,我并没有说不看好java,实际上我对java很乐观的,毕竟她正在不断改进中,我相信她总有一天会和.net并驾齐驱的
1.EMF.edit
a)申明:EMF.edit位于EMF.editor和EMF.Ecore之间,他起了一其中介者的感化。他卖力把来自EMF.editor的UI相干的哀求转换成切合EMF.Ecore的UI有关的挪用。他必要供应以下四个功效:完成用于撑持Viewer显现的ContentProvider和LabelProvider;完成用于撑持属性显现的IPropertySource;完成用于撑持对模子举行操纵的CommandFramework;完成用于撑持修正关照的Framework。
b)ContentProvider和LabelProvider
i.图:
ii.申明:当TreeViewer必要显现内容时,挪用她的IContentProvider的getChildren(Objectobj)办法。这个办法会被转发到AdapterFactoryContentProvider外部。她经由过程她所援用的ItemProviderAdapterFactory来猎取一个对obj的ITreeItemContentProvider范例的Adapter,这个Adapter是由EMF天生的对应于ECore模子的一个ItemProviderAdapter(这里为TeacherItemProvider),最初由这个TeacherItemProvider卖力天生所必要显现的子节点列表。
iii.代码:
publicclassAdapterFactoryContentProviderimplementsITreeContentProvider{
publicObject[]getChildren(Objectobject){
ITreeItemContentProvidertreeItemContentProvider=
(ITreeItemContentProvider)adapterFactory.adapt(object,
ITreeItemContentProvider.class);
returntreeItemContentProvider.getChildren(object);
}
}
注:白色是UI相干的哀求,蓝色是UI有关的适配器类,粉白色就是UI有关的哀求。
c)IPropertySource
i.图:
ii.申明:当PropertySheetPage必要显现属性内容时,他会见他的IPropertySourceProvider的getPropertySource(Objectobj)办法。这个办法会被转发到AdapterFactoryContentProvider外部。她经由过程她所援用的ItemProviderAdapterFactory来猎取一个对obj的IItemPropertySource范例的Adapter,这个Adapter是由EMF天生的对应于ECore模子的一个ItemProviderAdapter(这里为TeacherItemProvider),最初由这个TeacherItemProvider卖力天生所必要显现的属性列表。
iii.代码:
publicclassAdapterFactoryContentProviderimplementsIPropertySourceProvider{
publicIPropertySourcegetPropertySource(Objectobject){
IItemPropertySourceitemPropertySource=(IItemPropertySource)
adapterFactory.adapt(object,IItemPropertySource.class));
…
}
}
d)CommandFramework
i.图:
ii.申明:因为EMF.editor其实不懂得底层的模子细节,因而他不克不及间接对模子举行操纵,他必要天生一些用于操纵模子的Command对象。当editor必要对模子举行修正时,他经由过程挪用他的createCommand(EditingDomaindomain)办法,创立用于举行模子操纵的Command对象,该办法最初会被转发到domain的createCommand(),然后domain会依据他所援用的ItemProviderAdapterFactory来猎取一个IEditingDomainItemProvider的适配器,由他来最初天生用于对模子举行操纵的Command对象。
iii.代码:
publicclassDeleteActionextendsCommandActionHandler{
publicCommandcreateCommand(Collectionselection){
returnRemoveCommand.create(domain,selection);
}
}
publicclassRemoveCommandextendsAbstractOverrideableCommand{
publicstaticCommandcreate(…){
returndomain.createCommand(…);
}
}
publicclassAdapterFactoryEditingDomainimplementsEditingDomain{
publicCommandcreateCommand(…){
IEditingDomainItemProvidereditingDomainItemProvider=
(IEditingDomainItemProvider)adapterFactory.adapt(owner,
IEditingDomainItemProvider.class);
returneditingDomainItemProvider.createCommand(…);
}
}
注:当必要实行命令时,editor会挪用EditingDomain上的CommandStack,并挪用他下面的execute(Commandc)办法。
e)NotifyFramework
i.图:
ii.申明:当我们修正了模子的值今后,模子将会向他对应的ItemProvider收回一个更新关照,这个关照随后被转发到ItemProviderAdapterFactory,然后终极发到AdapterFactoryContentProvider处,并由他来卖力更新对应的viewer。
在ruby里才是一切皆对象。当然我不并不是很了解ruby,但是ruby确实是将语法简化得很好。 |
|