国产精品一区二区精品_久久小视频_天堂va在线观看_99久久夜色精品国产亚洲96_日本手机在线视频_av成人免费

當前位置:首頁 > 網站舊欄目 > 學習園地 > 設計軟件教程 > 插件開發中的IAdaptable另一種用法

插件開發中的IAdaptable另一種用法
2010-01-14 22:55:16  作者:  來源:

IAdaptable是Eclipse插件開發中非常重要的一個接口,在整個插件體系中也起著舉足輕重的作用。網上也有不少文章來介紹這個接口的用法,因為我沒有碰到那些文章中提到的一些IAdaptable應用場景,所以開始的時候對這個接口不以為然:不就是一個適配器嗎?有那么重要嗎?隨著項目的進展,IAdaptable終于讓我體會了它的好處。


先來介紹一下我的項目情況:我的項目是一個開發工具插件,其核心就是各種xml配置文件的編輯器。編輯器的組件體系比較復雜,就像芭比娃娃,一成套一層的,比如多頁編輯器中套單頁編輯器,單頁編輯器中根據不同的內容又分成不同的區塊,區塊還包含最終的編輯元素,比如text, combobox等等。而要編輯的內容模型內容以及相關的資源信息(比如IProject, IFile, IPath)大部分都位于組件結構的最外層,比如IEditorPart, IEditInput中。

而不同的組件層次可能需要不同的信息,為了降低耦合度,我開始定義和使用各種需要的資源內容的提供接口,比如IProjectProvider, IModelProiver, IConfigProvider,ISelectionProvider等等,這樣最外層實現了一堆Provider,然后根據不同的需要往內層傳,從外層到最終需要該資源的層之間不斷的傳遞,而中間起傳遞作用的各個層次都來實現這些IXxxxProvider接口。開始一兩個還無所謂,后來需要傳遞的資源多了,層次多了,維護非常麻煩(如果增加一種需要的資源,就定義一個IXxxxProvider)。于是開始尋找更好的方法來處理這種維護上的麻煩,一次偶然的機會在EMF generate的代碼中發現了IAdaptable接口的用法:

java 代碼
 
  1. public Object getAdapter(Class key) {   
  2.     if (key.equals(IContentOutlinePage.class)) {   
  3.         return showOutlineView() ? getContentOutlinePage() : null;   
  4.     }   
  5.     else if (key.equals(IPropertySheetPage.class)) {   
  6.         return getPropertySheetPage();   
  7.     }   
  8.     else if (key.equals(IGotoMarker.class)) {   
  9.         return this;   
  10.     }   
  11.     else {   
  12.         return super.getAdapter(key);   
  13.     }   
  14. }  

 

能不能將所有Provider合成一個呢?對,這樣中間的各個層次之間只需要實現IAdaptable接口就可以了,如果發生變化,只需要修改兩頭:即資源提供者和資源消費者,于是我的最外層定義了一個長長的IAdaptable的實現方法getAdaptable():

java 代碼
 
  1. public Object getAdapter(Class key) {   
  2.         if (key.equals(IContentOutlinePage.class)) {   
  3.             return showOutlineView() ? getContentOutlinePage() : null;   
  4.         }   
  5.         if (key.equals(IPropertySheetPage.class)) {   
  6.             return getPropertySheetPage();   
  7.         }   
  8.   
  9.         if (key.equals(IGotoMarker.class)   
  10.                 || key == IEditingDomainProvider.class  
  11.                 || key == ISelectionProvider.class  
  12.                 || key == IClipboardProvider.class  
  13.                 || key == IAdapterFactoryProvider.class) {   
  14.             return this;   
  15.         }   
  16.   
  17.         if (IProject.class.equals(key)) {   
  18.             return getProject();   
  19.         }   
  20.   
  21.         if (BaseConfig.class.equals(key)) {   
  22.             return ((IConfigProvider) this).getConfig();   
  23.         }   
  24.   
  25.         if (EObject.class.equals(key)) {   
  26.             return getModel();   
  27.         }   
  28.   
  29.         if (DoradoXMLResourceImpl.class.equals(key)) {   
  30.             return ((IResourceProvider) this).getResource();   
  31.         }   
  32.   
  33.         if (key == EditingDomain.class) {   
  34.             return editingDomain;   
  35.         }   
  36.   
  37.         if (key == AdapterFactory.class) {   
  38.             return adapterFactory;   
  39.         }   
  40.   
  41.         if (key == BaseActionBarContributor.class) {   
  42.             return getActionBarContributor();   
  43.         }   
  44.   
  45.         if (key == Clipboard.class) {   
  46.             return getGlobalClipboard();   
  47.         }   
  48.   
  49.         return super.getAdapter(key);   
  50.     }  

 

如果這個數據模型是獨一無二的,就直接根據模型類型返回模型,如果一個Provider可能會提供多個模型或者一種模型類型對應多個Provider那么就返回Provider,讓模型消費者決定來獲取哪個模型。
雖然重構為使用IAdaptable花了不少時間,但是對于后期的變動卻少了不少的麻煩,而且代碼也減肥了不少。


安徽新華電腦學校專業職業規劃師為你提供更多幫助【在線咨詢
国产精品一区二区精品_久久小视频_天堂va在线观看_99久久夜色精品国产亚洲96_日本手机在线视频_av成人免费
<button id="0mgmq"><pre id="0mgmq"></pre></button>
  • <tr id="0mgmq"></tr>
  • <abbr id="0mgmq"><source id="0mgmq"></source></abbr> <button id="0mgmq"></button>
  • 久久婷婷久久| 欧美成人一区二免费视频软件| 91久久久一线二线三线品牌| 国产精品国产精品| 亚洲欧洲精品一区二区三区波多野1战4| 女人香蕉久久**毛片精品| 99pao成人国产永久免费视频| 久久久久久一区二区| 久久久水蜜桃| 在线成人国产| 成人永久免费| 亚洲国产精品毛片| 国产欧美日韩综合精品二区| 久久99精品久久久久久青青日本| 亚洲欧洲国产日韩精品| 在线视频免费在线观看一区二区| 精品久久蜜桃| 激情婷婷久久| 韩国成人一区| 亚洲精品日本| 日本一区二区三区四区在线观看| 亚洲国产日韩美| 久久伊人一区二区| 亚洲麻豆一区| 茄子视频成人在线观看 | 国产欧美日韩综合精品二区| 久久riav二区三区| 在线成人国产| 久久婷婷影院| 欧美亚洲免费在线| 亚洲东热激情| 夜夜爽99久久国产综合精品女不卡 | 国产一区免费| 欧美久久在线| 国产伦精品一区二区三区视频黑人 | 国产伦一区二区三区色一情| 欧美三级网页| 久久伊人一区二区| 亚洲在线国产日韩欧美| 亚洲精品一区二区三区樱花| 波多野结衣一区二区三区在线观看| 国产精品豆花视频| 日韩精品欧美在线| 99电影网电视剧在线观看| 欧美精品网站| 日韩视频精品| 精品国产乱码久久久久软件| 亚洲一卡久久| 精品动漫av| 亚洲午夜精品久久久中文影院av| 99re6热在线精品视频播放速度| 黄色精品免费| 伊人天天久久大香线蕉av色| 久久久久网址| 成人精品一二区| 国产精品午夜av在线| 黄色日韩精品| 欧美日本在线| 在线视频不卡一区二区三区| 日本欧美精品久久久| 精品亚洲欧美日韩| 99视频网站| 久久久久九九九| 99pao成人国产永久免费视频| 欧美日韩精品免费观看视频完整| 视频一区二区三| 欧美不卡1区2区3区| 国产精品污www一区二区三区| 香蕉久久a毛片| 亚洲一区一卡| 亚洲精品一区二区三| 欧美日韩视频| 一区二区免费在线视频| 亚洲第一综合| 宅男av一区二区三区| 色播五月综合| 日韩欧美三级电影| 亚洲高清视频一区二区| 亚洲精品乱码视频| 一区二区三区的久久的视频| 亚洲欧洲精品一区二区三区波多野1战4| 免费看成人午夜电影| 国产亚洲一区二区三区在线播放| 毛片一区二区| 成人动漫在线观看视频| 精品999在线观看| 欧美午夜免费| 五月天亚洲综合| 亚洲欧美在线网| 影音先锋亚洲一区| 国产免费成人| 不卡视频一区| 日韩国产在线一区| 欧美女激情福利| 9国产精品视频| 久久久久久亚洲精品杨幂换脸 | 亚洲一区二区成人| 999在线观看免费大全电视剧| 精品久久久久久亚洲| 日韩精品不卡| 激情久久中文字幕| 久久在线精品| 久久久久天天天天| 午夜精品亚洲| 午夜一区二区三区不卡视频| 成人欧美一区二区三区视频| 久久久综合亚洲91久久98 | 国产精品初高中精品久久| 国产欧美日本在线| 91丨九色丨国产| 视频在线一区二区三区| 在线观看一区视频| 99电影网电视剧在线观看| 日韩成人av电影在线| 亚洲国产影院| 精品欧美一区二区精品久久| 一区二区三区欧美成人| 国产精品一级| 麻豆av一区二区三区| 欧美日韩岛国| 不卡日韩av| 国产精品v日韩精品v欧美精品网站| 亚洲欧美成人| 亚洲欧美日韩精品综合在线观看| 中文在线一区| 日韩久久不卡| 久久久久久久高潮| 中国成人在线视频| 97碰碰视频| 国内精品久久久久久久97牛牛| 成人在线免费网站| 精品99视频| 欧美日韩一区综合| 午夜亚洲激情| 欧美激情一区| 国产精品久久久久久久久久久久午夜片 | 欧美在线首页| 国产日韩欧美精品| 日韩午夜激情| 日韩三级电影网站| 97超碰人人看人人| 亚洲第一区色| 亚洲一区二区三区精品动漫| 久久天堂成人| 欧美精品麻豆| 精品无码久久久久国产| 99国产精品久久久久久久| 亚洲精品美女久久7777777| av成人午夜| 国产精品日本| 国产精品大片免费观看| 天堂一区二区三区| 国产伦精品一区二区| 香蕉视频成人在线观看| 韩日精品在线| 亚洲精品一品区二品区三品区| 国产精品对白一区二区三区| 国产日韩欧美| 亚洲高清av| 欧美黄色一级视频| 丝袜足脚交91精品| 免费久久一级欧美特大黄 | 99久久精品免费看国产一区二区三区 | 亚洲一区二区三区高清| 亚洲性感美女99在线| 宅男av一区二区三区| 欧美大陆一区二区| 国产精品一区而去| 成人av影视在线| 亚洲免费影院| 国产欧美成人| 国产欧美成人| av成人免费观看| 亚洲狼人精品一区二区三区| 欧美性久久久| 国内成+人亚洲| 国产精品国码视频| 国内精品久久久久久久97牛牛| 中文字幕色一区二区| 宅男在线精品国产免费观看| 亚洲精品国产精品久久| 亚洲一区二区三区在线观看视频 | 日韩国产精品一区二区| 日本一区二区精品| 色噜噜一区二区| 亚洲国产精品视频一区| 亚洲一区综合| 欧美成人dvd在线视频| 综合国产精品久久久| 欧美日韩成人| 亚洲精品婷婷| 久久本道综合色狠狠五月| 91青青草免费在线看| 国产精品乱子乱xxxx| 久久综合一区| 一区二区三区四区五区精品| 欧美成人嫩草网站| 亚洲精品日本| 91麻豆蜜桃| 久久婷婷国产综合尤物精品|