亚洲人成网站在线播放2019 _日韩国产欧美精品_久久夜色精品国产欧美乱_在线视频福利一区

當前位置:首頁 > 網站舊欄目 > 學習園地 > 設計軟件教程 > 插件開發中的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花了不少時間,但是對于后期的變動卻少了不少的麻煩,而且代碼也減肥了不少。


安徽新華電腦學校專業職業規劃師為你提供更多幫助【在線咨詢
亚洲人成网站在线播放2019 _日韩国产欧美精品_久久夜色精品国产欧美乱_在线视频福利一区
欧美高清视频一区| 欧美在线视频一区二区| 国产精品区二区三区日本| 深夜福利一区二区| 爽爽爽爽爽爽爽成人免费观看| 国产成人一区二区三区免费看| 91精品国产91久久久久久吃药| 91精品国产乱码久久久久久久久| 国产脚交av在线一区二区| 国产女人18毛片| 成人av色在线观看| 91成人国产在线观看| 久久天堂国产精品| 丝袜亚洲欧美日韩综合| 久久久久久午夜| 日韩在线观看成人| 国产精品欧美久久| 精品久久久久久乱码天堂| 国产精品欧美激情| 国产精品久久久久av| 国产精品二区二区三区| 欧美麻豆久久久久久中文| 国产精品久久av| 精品国产视频在线| 久久久久久久久久久99| 日韩精彩视频| 日韩在线观看a| 日产精品久久久一区二区| 视频一区免费观看| 成人av电影免费| 久久久久无码国产精品一区| 久久er99热精品一区二区三区| 日日骚av一区| 中文字幕一区二区三区在线乱码 | 国产精品区免费视频| 九九热在线精品视频| 日本在线观看a| 欧美中文字幕第一页| 国产精品综合久久久久久| 69av视频在线播放| 国产精品高潮呻吟久久av黑人| 亚洲色图都市激情| 欧美日韩激情视频在线观看| 99久久伊人精品影院| 国产精品无码av在线播放| 亚洲一区二区三区视频播放| 欧美高清性xxxxhdvideosex| 91久久久久久久久久久久久| 国产精品免费电影| 亚洲精品欧洲精品| 国产日韩视频在线播放| 日韩视频一区在线| 国产99久久精品一区二区永久免费| 日韩欧美亚洲v片| 91九色综合久久| 国产999视频| 国语自产精品视频在免费| 国产不卡视频在线| 中文字幕免费高| 免费高清在线观看免费| 久久久久久久网站| 视频一区二区视频| 99在线高清视频在线播放| 久久伊人精品天天| 黄在线观看网站| 日韩视频免费在线观看| 日本女人高潮视频| 国产精品亚发布| 美日韩精品免费观看视频| 欧美精品一区二区三区三州| 国产成人一二三区| 少妇久久久久久被弄到高潮| 国产精品在线看| 欧美精品免费在线| 国内精品一区二区| 国产精品日韩一区| 欧美精品在欧美一区二区| 久久riav| 日韩激情视频| 深夜福利国产精品| 欧美日韩电影一区二区三区| 丝袜亚洲欧美日韩综合| 色噜噜狠狠色综合网| 久久全国免费视频| 日韩中文字幕在线不卡| 久久久综合亚洲91久久98| 天堂av一区二区| 国产成人a亚洲精品| 日本久久精品视频| 日韩最新免费不卡| 男女猛烈激情xx00免费视频| 国产精品久久久久免费a∨| 精品一区久久久久久| 欧美另类99xxxxx| 北条麻妃在线一区| 欧美一区二区三区四区在线观看地址| 久久免费视频网站| 日本一区二区三区四区五区六区| 99久久综合狠狠综合久久止| 亚洲精品影院| 国产ts人妖一区二区三区| 日韩经典在线视频| 国产精品日韩电影| 国产欧美韩日| 亚洲91精品在线观看| 久久精品国产精品国产精品污| 热99精品里视频精品| 国产精品久久久久久久久久小说| 国产一区免费| 亚洲xxxx做受欧美| 色av吧综合网| 国产日韩欧美中文在线播放| 欧美乱大交xxxxx| 91久久国产精品| 日本三日本三级少妇三级66| 久久久久中文字幕| 国产一区二区在线网站| 亚洲国产精品日韩| 深夜福利日韩在线看| 国产日韩欧美在线| 无码人妻精品一区二区蜜桃网站| 国产成人亚洲综合无码| 欧美自拍视频在线观看| 久久中文字幕国产| 国产精品一区久久| 日韩精品伦理第一区| 国产精品大陆在线观看| 国产在线精品自拍| 亚洲图色在线| 色青青草原桃花久久综合| 欧美午夜欧美| 自拍另类欧美| 久久久亚洲国产天美传媒修理工| 日韩欧美精品免费| 久久久久久国产精品三级玉女聊斋| 久久婷婷人人澡人人喊人人爽 | 久久精品日韩精品| 国产一区二区三区乱码| 欧美日韩xxxxx| 久久精品日产第一区二区三区 | 精品国产一区二区三区久久狼5月 精品国产一区二区三区久久久狼 精品国产一区二区三区久久久 | 日韩 欧美 高清| 久久久国产精品免费| 国产一区视频免费观看| 欧美成人精品三级在线观看| 99久久精品无码一区二区毛片| 日本免费在线精品| 国产精品久久久久999| 久久一区免费| 国产午夜伦鲁鲁| 日本成人在线不卡| 亚洲综合中文字幕在线| 俺也去精品视频在线观看| 97人人爽人人喊人人模波多| 欧美自拍视频在线观看| 亚洲三级一区| 国产精品久久久久av| 久久久久久久久久码影片| 国产日韩专区在线| 日韩av一区二区三区在线| 九九热在线精品视频| 国产富婆一区二区三区| 国内精品视频免费| 亚洲高清视频一区二区| 国产精品后入内射日本在线观看| 99国产精品白浆在线观看免费| 久久国产精品影视| 国产成人+综合亚洲+天堂| 国产男女免费视频| 美女主播视频一区| 日本一区视频在线| 伊人久久大香线蕉成人综合网| 国产精品无码av无码| 91精品视频在线| 日韩久久在线| 亚洲 欧美 日韩 国产综合 在线| 久久精品国产96久久久香蕉| 久久久女人电视剧免费播放下载| 国产亚洲黄色片| 免费观看国产成人| 激情小说综合区| 青青草原av在线播放| 日韩不卡视频一区二区| 久久99精品视频一区97| 国产精品视频入口| 久久99久久久久久| 久久久久久亚洲精品中文字幕| 久久精品午夜一区二区福利| 蜜桃av久久久亚洲精品| 视频在线99re| 日韩中文字幕在线不卡| 日韩 欧美 自拍| 五月天在线免费视频| 亚洲综合色av| 亚洲最大av在线| 亚洲砖区区免费| 一道本在线观看视频| 日韩中文字幕在线观看| 国产v片免费观看| 国产白丝袜美女久久久久|