麻豆传媒视频在线,国产91精品不卡视频,欧美jizz19性欧美,污视频网站在线观看,91涩漫在线观看,伊人发布在线,九色porny丨首页在线,福利视频一区,久久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花了不少時間,但是對于后期的變動卻少了不少的麻煩,而且代碼也減肥了不少。


安徽新華電腦學校專業職業規劃師為你提供更多幫助【在線咨詢
毛片.com| 僵尸再翻生在线观看免费国语| 正在播放欧美视频| 日韩一区二区三区三四区视频在线观看| 色偷偷久久人人79超碰人人澡| 欧美日韩免费观看中文| 福利视频导航一区| 欧美三级在线视频| 日韩欧美一级精品久久| 精品国产一区久久| 亚洲第一福利在线观看| 亚洲精品国产欧美| 一区二区三区精品99久久| 亚洲欧美综合v| 精品激情国产视频| 国语对白做受69| 国产男人精品视频| 欧美91精品久久久久国产性生爱| 欧美性videos| 伊人久久精品一区二区三区| 亚洲va欧美va人人爽成人影院| 青青操综合网| 黑人一区二区| 捆绑调教一区二区三区| 99免费精品视频| 国产精品网曝门| 色婷婷av一区二区| 亚洲精品大尺度| 欧美日韩爱爱视频| 国产一区二区在线播放| 爱爱爱免费视频在线观看| 高端美女服务在线视频播放| 欧洲午夜精品| 波多野结衣在线观看一区二区 | 高端美女服务在线视频播放| 亚洲欧美综合久久久久久v动漫| 国产欧美日韩影院| 日韩电影一区二区三区四区| 中文字幕欧美区| 性日韩欧美在线视频| 国产精品丝袜久久久久久不卡| av电影在线网| 日韩欧美中文在线观看| 99热精品在线观看| 国产亚洲精品资源在线26u| 色综合色综合色综合 | 欧美最新大片在线看| 中文字幕av一区二区| 18av.com视频| 黑人精品视频| 九九综合在线| 国内不卡的二区三区中文字幕| 亚洲综合免费观看高清完整版在线| 欧美一区二区在线看| 性色av一区二区三区| 在线激情小视频| 全国精品免费看| 国产精品综合视频| 日本大香伊一区二区三区| 久久夜色精品国产亚洲aⅴ| 日本18视频网站| 国产精品高清乱码在线观看| 66国产精品| 国产欧美一区二区精品婷婷 | 粉嫩老牛aⅴ一区二区三区| 亚洲女人天堂成人av在线| 欧美一区二区大胆人体摄影专业网站| 国产综合在线观看| 卡通动漫国产精品| 久久99精品久久久久久| 五月天一区二区三区| 美日韩精品视频免费看| 求av网址在线观看| 精品一级毛片| 播五月开心婷婷综合| 777xxx欧美| 国产精品三级a三级三级午夜| 亚洲女同志freevdieo| 99亚洲精品| 欧美日韩在线看| 日韩av理论片| 成人自拍视频网| 日本亚洲免费观看| 精品视频一区二区不卡| 国产日韩一区在线| 日韩高清一区| 99亚偷拍自图区亚洲| 日韩激情视频在线| 懂色一区二区三区| 在线一区免费| 婷婷夜色潮精品综合在线| 38少妇精品导航| 日韩中文影院| 国产一区二区免费看| 亚洲高清色综合| av在线资源站| 亚洲国产高清一区二区三区| 欧美日韩中文字幕日韩欧美| 国产精品丝袜久久久久久不卡| 国产精品久久免费视频| 91在线国产观看| 欧美成在线视频| 欧洲一级精品| av一区二区不卡| 久久中国妇女中文字幕| 毛片无码国产| 成人黄色综合网站| xvideos亚洲人网站| 欧美黑人疯狂性受xxxxx野外| 九色|91porny| 在线观看日韩www视频免费| а√天堂8资源中文在线| 国产一区二区三区免费| 一区二区三区视频观看| 欧美gv在线观看| 成人黄色a**站在线观看| 欧美成人合集magnet| 亚洲人体在线| 亚洲人被黑人高潮完整版| 国产欧美日韩精品在线观看| 欧美三级三级| 欧美日韩视频专区在线播放| 自拍视频在线| 久久91精品久久久久久秒播| 少妇精69xxtheporn| 亚洲视频资源| 亚洲综合一二三区| 阳光姐妹淘韩国版| 亚洲视频一区| 亚洲第一区中文字幕| 麻豆免费在线| 久久伊人中文字幕| 国产精品老女人精品视频| 国产成人精品三级高清久久91| 欧美日韩国产精品一区二区三区四区| 五月伊人六月| 99av国产精品欲麻豆| 亚洲精品国产精品国自产在线| www.综合| 国产精品国产精品国产专区不蜜 | 黄色日韩在线| 亚洲精品99999| 国产一区一一区高清不卡| 国产精品久久久久婷婷| 啦啦啦中文高清在线视频| 国产一区清纯| 亚洲人成伊人成综合网久久久 | 日韩国产激情| 国产精品福利一区二区| 超碰96在线| 日韩电影在线一区二区三区| 欧美成人精品一区二区| 自拍亚洲一区| 日韩美一区二区三区| gay欧美网站| 亚洲精品欧美在线| 3d成人动漫在线| 久久综合色天天久久综合图片| 成人a在线观看| 日韩黄色一级片| 91精品国产乱码久久久久久久久 | 欧美日韩国产综合一区二区三区| 免费不卡视频| 国产欧美视频在线观看| 嘿咻视频在线看| 韩国毛片一区二区三区| 国产69久久精品成人看| 日韩www.| 中文字幕久久久av一区| 米奇精品关键词| 欧美一区二区三区不卡| 成人免费福利| 日韩欧美aaa| 在线毛片观看| 欧美天天综合色影久久精品| 国产又色又爽又黄刺激在线视频| 国产精品成人免费| 成人h小游戏| 欧美高清在线视频| 欧美性videos| 亚洲视频在线一区| av免费在线观| 亚洲天堂中文字幕| 午夜伦理大片视频在线观看| 亚洲精品乱码久久久久久日本蜜臀| 国产精品99999| 国产精品视频观看| 毛片在线看片| 一区二区理论电影在线观看| 国产后进白嫩翘臀在线观看视频| 亚洲一二三级电影| 亚洲精品在线影院| 日韩欧美国产电影| 一区二区三区四区在线看| 在线看福利67194| 亚洲青涩在线| 91黑丝在线| 久久精品一区二区三区不卡| 午夜av在线播放| 欧美日韩国产一区二区三区地区|