<source id="4vppl"><ins id="4vppl"></ins></source>
<u id="4vppl"><sub id="4vppl"><label id="4vppl"></label></sub></u>
<object id="4vppl"></object>
  • <u id="4vppl"><li id="4vppl"><label id="4vppl"></label></li></u>

    <object id="4vppl"></object>
    <b id="4vppl"><sub id="4vppl"><tr id="4vppl"></tr></sub></b>

      <i id="4vppl"><thead id="4vppl"></thead></i>

      <thead id="4vppl"><li id="4vppl"><label id="4vppl"></label></li></thead>

      當前位置:首頁 > 網(wǎng)站舊欄目 > 學習園地 > 設計軟件教程 > EMF開發(fā)指南之Command Framework

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

      安徽新華電腦學校專業(yè)職業(yè)規(guī)劃師為你提供更多幫助【在線咨詢
      国产午夜福三级在线播放_亚洲精品成a人片在线观看_亚洲自慰一区二区三区_久久棈精品久久久久久噜噜
      <source id="4vppl"><ins id="4vppl"></ins></source>
      <u id="4vppl"><sub id="4vppl"><label id="4vppl"></label></sub></u>
      <object id="4vppl"></object>
    1. <u id="4vppl"><li id="4vppl"><label id="4vppl"></label></li></u>

      <object id="4vppl"></object>
      <b id="4vppl"><sub id="4vppl"><tr id="4vppl"></tr></sub></b>

        <i id="4vppl"><thead id="4vppl"></thead></i>

        <thead id="4vppl"><li id="4vppl"><label id="4vppl"></label></li></thead>
        亚洲色婷婷久久久综合日本 | 午夜福利亚洲精品无遮挡 | 午夜精品褔利一区二区三区蜜桃 | 亚洲第一r级在线视频 | 日韩欧美国产第一页 | 亚洲综合色婷婷七月丁香 |