亚洲人成网站在线播放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 _日韩国产欧美精品_久久夜色精品国产欧美乱_在线视频福利一区
国产精品久久久久77777| 国产欧美日韩91| 99视频在线免费| 国产日产精品一区二区三区四区| 亚洲a∨一区二区三区| 久久久久成人网| 国产av第一区| 中文字幕免费高| 亚洲精品日韩精品| 日本一区网站| 亚洲一区二区三区久久| 久久99热精品| 国产精品美女免费看| 久久亚洲一区二区| 国产成人一区二区三区别| 99视频国产精品免费观看| 99视频在线| 91精品久久久久久久| 国产成人精品久久亚洲高清不卡| 91精品在线观| 日韩中文av在线| 国产成人精品无码播放| 国产精品aaa| 久草在在线视频| 久久久999视频| 色妞欧美日韩在线| 久久中文久久字幕| 国产精品区免费视频| 久久国产精品久久久久久久久久| 一区二区三区四区免费视频| 欧美一区2区三区4区公司二百| 日本精品一区二区三区四区| 国内免费久久久久久久久久久| 国产精品香蕉av| 国产精品免费网站| 五月天国产一区| 国产肉体ⅹxxx137大胆| 久久久久国产精品视频| 久久精品99久久久香蕉| 亚洲巨乳在线观看| 麻豆av一区二区三区| 91精品国产自产91精品| 欧美精品免费在线| 亚洲永久一区二区三区在线| 日本一二三区视频在线| 精品一区日韩成人| 日韩中文字幕在线视频| 亚洲精品成人自拍| 国产女女做受ⅹxx高潮| 波霸ol色综合久久| 亚洲自拍小视频| 欧美日韩精品一区| 精品国产乱码久久久久久108 | 久久另类ts人妖一区二区 | 久久久久一本一区二区青青蜜月| 国产精品涩涩涩视频网站| 欧美另类一区| 精品久久久久久一区| 激情六月天婷婷| 久久国产精品偷| 国产高清自拍99| 欧美精品中文字幕一区二区| 国产精品海角社区在线观看| 91久久国产综合久久91精品网站 | 欧美一区二视频在线免费观看| 阿v天堂2017| 国产日韩欧美中文| 国产精品免费看久久久无码| 国产精品亚洲网站| 国产日韩在线精品av| 日韩免费在线观看视频| 日韩av高清不卡| 亚洲一卡二卡| 亚洲乱码一区二区三区 | 国产一区二区三区精彩视频| 欧美成人精品影院| 欧美日韩一区二区三区电影| 国产主播一区二区三区四区| 国产富婆一区二区三区| 欧美黄网免费在线观看| 黄色av网址在线播放| 国产黄色特级片| 午夜精品一区二区三区在线播放| 国产精品一区二区三区观看| 欧美成在线观看| 日韩和欧美的一区二区| 久久黄色免费看| 欧美激情视频三区| 精品欧美一区二区久久久伦| 加勒比海盗1在线观看免费国语版| 国产精品网站免费| av一区二区三区免费观看| 亚洲精品人成| 每日在线更新av| 亚洲熟妇无码另类久久久| 国产成人精品一区二区| 久久久久se| 久久久久免费看黄a片app| 91美女片黄在线观看游戏| 欧美精品卡一卡二| 欧美在线观看日本一区| 日韩视频在线免费看| 亚洲黄色网址在线观看| 最新中文字幕久久| 国产99午夜精品一区二区三区| 国产www免费| 国产精品aaaa| 国产视频观看一区| 国产原创精品| 国产欧美综合一区| 国产精品自拍网| 国内精品久久久久久久果冻传媒| 黄页网站大全在线观看| 欧美精品一区二区三区三州| 影音先锋欧美在线| 久久久极品av| 久久中文字幕在线视频| 中文字幕乱码人妻综合二区三区| 久久国产精品久久久久久久久久| 九九热只有这里有精品| 国产成人精品在线| 偷拍盗摄高潮叫床对白清晰| 少妇高清精品毛片在线视频 | 亚洲国产日韩综合一区 | 欧美精品123| 精品日韩欧美| 91精品一区二区三区四区| 久久精品日韩| 真实国产乱子伦对白视频| 亚洲在线第一页| 欧美一区二区三区艳史| 日韩少妇中文字幕| 精品日本一区二区三区在线观看| 国产日本一区二区三区| 国产欧美日韩丝袜精品一区| 国产精品一区av| 91免费人成网站在线观看18| 国产精品视频不卡| 亚洲福利av在线| 国内精品国语自产拍在线观看| 97国产一区二区精品久久呦| 亚洲不卡中文字幕| 精品人妻大屁股白浆无码| 91免费在线视频| 视频直播国产精品| 天天综合色天天综合色hd| 欧美日产一区二区三区在线观看| 成人精品一区二区三区电影免费| 国产成人精品自拍| 欧美激情极品视频| 麻豆精品蜜桃一区二区三区| 国产激情在线观看视频| 亚洲精品视频一二三| 日韩精品免费一区| 91精品在线一区| 电影午夜精品一区二区三区| 国产精品99久久久久久久| 中文字幕中文字幕一区三区| 国产精品一二三在线| 中文字幕一区综合| 日韩在线播放视频| 国产精品成人播放| 国产欧美日韩最新| 日韩av日韩在线观看| 中文精品一区二区三区| 色乱码一区二区三在线看| 91av网站在线播放| 亚洲巨乳在线观看| 久久av综合网| 亚洲欧美日韩不卡一区二区三区 | 久久久视频免费观看| 国产精品黄色影片导航在线观看| 日韩中文字幕组| 国产精品人人做人人爽| 久久人人爽国产| 国产日韩在线精品av| 日本高清视频一区二区三区| 色综合久久天天综线观看| 国产一区二区在线观看免费播放 | 一区视频二区视频| 久久精品日韩精品| 国产精品一区二区三区四区五区| 中文字幕色呦呦| 欧美美最猛性xxxxxx| 色老头一区二区三区| 久久综合毛片| 欧美一区二区影院| 人妻精品无码一区二区三区| 久久激情五月丁香伊人| 久久久天堂国产精品女人| 日本久久91av| 国产一区二区视频在线观看 | 日韩欧美亚洲在线| 国产精品久久9| 亚洲日本一区二区三区在线不卡| 国产欧美日韩专区发布| 日韩欧美视频免费在线观看| 性欧美大战久久久久久久| 中文字幕日韩精品无码内射| 精品国产91亚洲一区二区三区www|