★emf的command framework分為兩部分,一部分是common的不依賴(lài)于emf.edit的command,另一個(gè)部分是和emf.edit關(guān)聯(lián)的command,和emf.edit關(guān)聯(lián)的command,通過(guò)EObject的相關(guān)方法來(lái)實(shí)現(xiàn)對(duì)model的attribute設(shè)置,reference修改,copy&paste操作等。
★在command command中,提供了一個(gè)Command接口,里面的方法包括execute(), undo(),redo(),canExecute(), canUndo()等等。其中g(shù)etResult()方法的作用一般是用來(lái)告訴后續(xù)的command,當(dāng)前操作的結(jié)果,這個(gè)在組合command中會(huì)用到,而getAffectedObject()方法則用來(lái)取得受execute(), redo(), undo()方法影響的對(duì)象,這個(gè)方法通常在emf.edit的ui framework中使用,比如一個(gè)屬性被修改之后,其他受影響的屬性也響應(yīng)發(fā)生修改了,則ui對(duì)被修改的屬性使用不同的顏色來(lái)加以標(biāo)識(shí)(比如高亮),則兩個(gè)方法返回的結(jié)果有時(shí)候會(huì)是一樣的。
★從Command繼承而來(lái)的AbstractCommand做的一件非常重要的事情就是實(shí)現(xiàn)了canExecute()方法,同時(shí)讓從AbstractCommand繼承的子類(lèi)去實(shí)現(xiàn)prepare()方法來(lái)決定是否可執(zhí)行,從而保證canExecute()最終只會(huì)被執(zhí)行一次prepare()來(lái)做判斷command是否能執(zhí)行
★CommandStack主要在undo,redo的時(shí)候使用,它使用一個(gè)stack來(lái)維護(hù)所有可undoable的command,可以給commandstack添加一個(gè)CommandStackListener,那么stack中的所有command在被調(diào)用的時(shí)候都會(huì)出發(fā)該listener。BasicCommandStack是CommandStack的一個(gè)簡(jiǎn)單實(shí)現(xiàn)
★CompoundCommand用來(lái)一次執(zhí)行多個(gè)command,它提供了一些特殊的操作,比如appendAndExecute(),該方法可以很好的將已執(zhí)行的command加以記錄下來(lái),這樣我們?cè)趗ndo的時(shí)候,直接倒過(guò)來(lái)執(zhí)行commandlist中的每一個(gè)command即可,實(shí)際上其他的command也會(huì)在execute()方法里面這么干,另外一個(gè)方法就是unwrap(),如果你的compound command只有一個(gè)command的時(shí)候,該方法會(huì)起到一定的優(yōu)化作用。
★Set,Add,Remove,Move,Replace以及CopyCommand都是和emf.edit關(guān)聯(lián)的基本command,不過(guò)CopyCommand實(shí)際上是一個(gè)Compound Command,它結(jié)合了CreateCopyCommand和InitinalizeCopyCommand。對(duì)這些基本command加以組合便可以形成其他更高級(jí)的command,比如CreateChildCommand(AddCommand+SetCommand),CutToClipboardCommand(RemoveCommand),PasteFromClipboardCommand(AddCommand+CopyCommand),DragAndDropCommand(CopyCommand+RemoveCommand+AddCommand)等等。
★AbstractOverrideableCommand解決了一個(gè)代理的問(wèn)題,不過(guò)還沒(méi)明白有什么用
★CommandParameter用來(lái)封裝創(chuàng)建command所需要的參數(shù),通過(guò)參看EditingDomain的createCommand方法實(shí)現(xiàn)我們可以得知,通過(guò)反射得到要?jiǎng)?chuàng)建的Command Class,接著根據(jù)約定:每一種Command必須提供相應(yīng)的靜態(tài)創(chuàng)建方法create來(lái)生成對(duì)應(yīng)的Command實(shí)例
★model如何顯示交給Label Provider來(lái)管理,而對(duì)model的維護(hù)則交給了EditingDomain,該實(shí)現(xiàn)主要做三件事:創(chuàng)建command,維護(hù)undo command stack,對(duì)編輯的resource提供訪問(wèn)接口。
★IEditingDomainItemProvider是用來(lái)訪問(wèn)model的層次關(guān)系的接口(Editing Domain也實(shí)現(xiàn)了這些方法,因此后者會(huì)調(diào)用前者的實(shí)現(xiàn))。而IEditingDomainItemProvider的實(shí)現(xiàn)則是通過(guò)ItemProvider來(lái)取得
★ItemProviderAdapter也提供了一個(gè)根據(jù)editing domain, commandparameter創(chuàng)建command的createCommand()方法。它和AdapterFactoryEditingDomain的實(shí)現(xiàn)基本一樣。
★在command command中,提供了一個(gè)Command接口,里面的方法包括execute(), undo(),redo(),canExecute(), canUndo()等等。其中g(shù)etResult()方法的作用一般是用來(lái)告訴后續(xù)的command,當(dāng)前操作的結(jié)果,這個(gè)在組合command中會(huì)用到,而getAffectedObject()方法則用來(lái)取得受execute(), redo(), undo()方法影響的對(duì)象,這個(gè)方法通常在emf.edit的ui framework中使用,比如一個(gè)屬性被修改之后,其他受影響的屬性也響應(yīng)發(fā)生修改了,則ui對(duì)被修改的屬性使用不同的顏色來(lái)加以標(biāo)識(shí)(比如高亮),則兩個(gè)方法返回的結(jié)果有時(shí)候會(huì)是一樣的。
★從Command繼承而來(lái)的AbstractCommand做的一件非常重要的事情就是實(shí)現(xiàn)了canExecute()方法,同時(shí)讓從AbstractCommand繼承的子類(lèi)去實(shí)現(xiàn)prepare()方法來(lái)決定是否可執(zhí)行,從而保證canExecute()最終只會(huì)被執(zhí)行一次prepare()來(lái)做判斷command是否能執(zhí)行
★CommandStack主要在undo,redo的時(shí)候使用,它使用一個(gè)stack來(lái)維護(hù)所有可undoable的command,可以給commandstack添加一個(gè)CommandStackListener,那么stack中的所有command在被調(diào)用的時(shí)候都會(huì)出發(fā)該listener。BasicCommandStack是CommandStack的一個(gè)簡(jiǎn)單實(shí)現(xiàn)
★CompoundCommand用來(lái)一次執(zhí)行多個(gè)command,它提供了一些特殊的操作,比如appendAndExecute(),該方法可以很好的將已執(zhí)行的command加以記錄下來(lái),這樣我們?cè)趗ndo的時(shí)候,直接倒過(guò)來(lái)執(zhí)行commandlist中的每一個(gè)command即可,實(shí)際上其他的command也會(huì)在execute()方法里面這么干,另外一個(gè)方法就是unwrap(),如果你的compound command只有一個(gè)command的時(shí)候,該方法會(huì)起到一定的優(yōu)化作用。
★Set,Add,Remove,Move,Replace以及CopyCommand都是和emf.edit關(guān)聯(lián)的基本command,不過(guò)CopyCommand實(shí)際上是一個(gè)Compound Command,它結(jié)合了CreateCopyCommand和InitinalizeCopyCommand。對(duì)這些基本command加以組合便可以形成其他更高級(jí)的command,比如CreateChildCommand(AddCommand+SetCommand),CutToClipboardCommand(RemoveCommand),PasteFromClipboardCommand(AddCommand+CopyCommand),DragAndDropCommand(CopyCommand+RemoveCommand+AddCommand)等等。
★AbstractOverrideableCommand解決了一個(gè)代理的問(wèn)題,不過(guò)還沒(méi)明白有什么用
★CommandParameter用來(lái)封裝創(chuàng)建command所需要的參數(shù),通過(guò)參看EditingDomain的createCommand方法實(shí)現(xiàn)我們可以得知,通過(guò)反射得到要?jiǎng)?chuàng)建的Command Class,接著根據(jù)約定:每一種Command必須提供相應(yīng)的靜態(tài)創(chuàng)建方法create來(lái)生成對(duì)應(yīng)的Command實(shí)例
★model如何顯示交給Label Provider來(lái)管理,而對(duì)model的維護(hù)則交給了EditingDomain,該實(shí)現(xiàn)主要做三件事:創(chuàng)建command,維護(hù)undo command stack,對(duì)編輯的resource提供訪問(wèn)接口。
★IEditingDomainItemProvider是用來(lái)訪問(wèn)model的層次關(guān)系的接口(Editing Domain也實(shí)現(xiàn)了這些方法,因此后者會(huì)調(diào)用前者的實(shí)現(xiàn))。而IEditingDomainItemProvider的實(shí)現(xiàn)則是通過(guò)ItemProvider來(lái)取得
★ItemProviderAdapter也提供了一個(gè)根據(jù)editing domain, commandparameter創(chuàng)建command的createCommand()方法。它和AdapterFactoryEditingDomain的實(shí)現(xiàn)基本一樣。
安徽新華電腦學(xué)校專(zhuān)業(yè)職業(yè)規(guī)劃師為你提供更多幫助【在線(xiàn)咨詢(xún)】

熱門(mén)精品專(zhuān)業(yè)

