浏览 4380 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2007-01-25
★在command command中,提供了一个Command接口,里面的方法包括execute(), undo(),redo(),canExecute(), canUndo()等等。其中getResult()方法的作用一般是用来告诉后续的command,当前操作的结果,这个在组合command中会用到,而getAffectedObject()方法则用来取得受execute(), redo(), undo()方法影响的对象,这个方法通常在emf.edit的ui framework中使用,比如一个属性被修改之后,其他受影响的属性也响应发生修改了,则ui对被修改的属性使用不同的颜色来加以标识(比如高亮),则两个方法返回的结果有时候会是一样的。 ★从Command继承而来的AbstractCommand做的一件非常重要的事情就是实现了canExecute()方法,同时让从AbstractCommand继承的子类去实现prepare()方法来决定是否可执行,从而保证canExecute()最终只会被执行一次prepare()来做判断command是否能执行 ★CommandStack主要在undo,redo的时候使用,它使用一个stack来维护所有可undoable的command,可以给commandstack添加一个CommandStackListener,那么stack中的所有command在被调用的时候都会出发该listener。BasicCommandStack是CommandStack的一个简单实现 ★CompoundCommand用来一次执行多个command,它提供了一些特殊的操作,比如appendAndExecute(),该方法可以很好的将已执行的command加以记录下来,这样我们在undo的时候,直接倒过来执行commandlist中的每一个command即可,实际上其他的command也会在execute()方法里面这么干,另外一个方法就是unwrap(),如果你的compound command只有一个command的时候,该方法会起到一定的优化作用。 ★Set,Add,Remove,Move,Replace以及CopyCommand都是和emf.edit关联的基本command,不过CopyCommand实际上是一个Compound Command,它结合了CreateCopyCommand和InitinalizeCopyCommand。对这些基本command加以组合便可以形成其他更高级的command,比如CreateChildCommand(AddCommand+SetCommand),CutToClipboardCommand(RemoveCommand),PasteFromClipboardCommand(AddCommand+CopyCommand),DragAndDropCommand(CopyCommand+RemoveCommand+AddCommand)等等。 ★AbstractOverrideableCommand解决了一个代理的问题,不过还没明白有什么用 ★CommandParameter用来封装创建command所需要的参数,通过参看EditingDomain的createCommand方法实现我们可以得知,通过反射得到要创建的Command Class,接着根据约定:每一种Command必须提供相应的静态创建方法create来生成对应的Command实例 ★model如何显示交给Label Provider来管理,而对model的维护则交给了EditingDomain,该实现主要做三件事:创建command,维护undo command stack,对编辑的resource提供访问接口。 ★IEditingDomainItemProvider是用来访问model的层次关系的接口(Editing Domain也实现了这些方法,因此后者会调用前者的实现)。而IEditingDomainItemProvider的实现则是通过ItemProvider来取得 ★ItemProviderAdapter也提供了一个根据editing domain, commandparameter创建command的createCommand()方法。它和AdapterFactoryEditingDomain的实现基本一样。 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |