亚洲人成网站在线播放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国自产精品中文字幕亚洲| 麻豆成人av| 国产在线精品一区免费香蕉| 国产中文字幕视频在线观看| 国产综合av一区二区三区| 麻豆av一区二区三区久久| 国产日韩av在线播放| 成人免费aaa| 7777在线视频| 视频在线一区二区| 国产精品久在线观看| 久久福利网址导航| 宅男av一区二区三区| 少妇一晚三次一区二区三区| 秋霞午夜一区二区| 黄色一级在线视频| 国产一区在线播放| 91精品国产91久久久久青草| 国产白丝袜美女久久久久| 久久久精品国产| 久久国产精品亚洲| 日韩一级片播放| 欧美亚洲免费在线| 国产欧美精品在线| 久久精品国产精品青草色艺| 国产精品久久久久久搜索| 一女被多男玩喷潮视频| 日韩欧美亚洲在线| 国产日韩一区二区三区| 91av在线国产| 国产精品久久久久久久天堂第1集| 国产精品吊钟奶在线| 一区二区高清视频| 欧洲精品亚洲精品| 波多野结衣成人在线| 久久视频这里只有精品| 一本一生久久a久久精品综合蜜| 欧洲精品在线播放| 99在线观看视频免费| 国产精品日韩在线一区| 亚洲国产成人不卡| 国产又黄又爽免费视频| 久久久久一本一区二区青青蜜月| 色综合视频一区中文字幕| 热re99久久精品国99热蜜月| av在线播放亚洲| www.日韩av.com| 亚洲永久一区二区三区在线| 国产精品一区二区欧美 | 精品一区久久久| 久久免费视频网| 久久久久久12| 欧美国产视频一区| 久久免费视频这里只有精品| 欧美精品第一页在线播放| 欧美极品一区二区| 久久精品视频16| 婷婷久久五月天| 成人黄动漫网站免费| 国产精品网红直播| 欧美一区二区色| 粉嫩av一区二区三区免费观看| 国产精品久久久久aaaa九色| 欧美在线性视频| 久久久久久免费精品| 日韩av成人在线| 久久久一本二本三本| 一区精品视频| 国产一区二区在线免费| 国产精品免费一区二区| 欧美午夜精品久久久久久蜜 | 欧美在线观看网址综合| 国产精彩视频一区二区| 中文字幕中文字幕在线中一区高清| 国产一区二区四区| 国产精品黄视频| 欧美中日韩免费视频| 久久久久狠狠高潮亚洲精品| 亚洲欧美国产不卡| 99精品一区二区三区的区别| 中文字幕中文字幕在线中一区高清| 国产男女无遮挡| 久久99热精品这里久久精品| 国产一区二区三区在线免费| 欧美成人免费一级人片100| 国产综合18久久久久久| 国产精品美女av| 国产综合第一页| 久久99精品久久久久久噜噜| 国产精品亚洲激情| 亚洲精品国产系列| 久久久中精品2020中文| 日本亚洲欧洲色α| 日韩中文字幕第一页| 欧美日韩国产高清视频| 国产精品福利在线| 成人免费福利在线| 欧美一级黄色影院| 国产成人拍精品视频午夜网站| 欧美一区观看| 精品久久久久av| www.日日操| 午夜午夜精品一区二区三区文| 91成人免费观看网站| 日韩av一区二区三区在线观看| 久久99精品久久久久久秒播放器 | 亚洲国产精品www| 国产成人精品日本亚洲| 欧美在线日韩在线| 欧美成人精品在线| 北条麻妃在线一区| 日本亚洲欧美成人| 国产精品免费久久久久影院| 国产欧美日韩网站| 色一情一乱一乱一区91| 久久久999国产精品| 国产精选久久久久久| 日本一区二区在线| 国产精品福利片| 国产精品99久久免费黑人人妻 | 福利视频一区二区三区四区| 五月天婷亚洲天综合网鲁鲁鲁| 久久久久免费看黄a片app| 国产在线观看福利| 日本中文字幕成人| 色综合91久久精品中文字幕| 国产福利一区视频| 国产又黄又大又粗视频| 日产精品高清视频免费| 久久91精品国产91久久跳| 久久久久久久久久网| 国产精品一区免费观看| 日韩视频在线观看国产| 欧美日韩成人黄色| 俺去亚洲欧洲欧美日韩| 91免费国产网站| 韩国一区二区三区美女美女秀| 国产精品嫩草影院久久久| 欧美视频免费看欧美视频| 色综合导航网站| 国产va免费精品高清在线| 国产视频一区二区不卡| 日本视频一区在线观看| 色综合久久天天综线观看| 日韩中文字幕网址| 91久久偷偷做嫩草影院| 国产精品高清一区二区三区| 激情视频小说图片| 色综合久久av| 在线观看日韩羞羞视频| 国产精品久久久久久一区二区| 国产第一页视频| 粉嫩高清一区二区三区精品视频| 欧美韩国日本在线| 日本黄网站色大片免费观看| 一区不卡视频| 国产99久久精品一区二区 夜夜躁日日躁 | 亚洲精品免费在线视频| 九九热这里只有精品6| 久久精品这里热有精品| 久久av免费一区| 久久天天东北熟女毛茸茸| 高清av免费一区中文字幕| 国产欧美日韩精品专区| 国产日韩欧美精品| 国产欧美日韩小视频| 国产欧美精品在线| 国产免费内射又粗又爽密桃视频| 国产日韩精品推荐| 国产欧美精品一区二区三区| 精品一区久久久| 国内免费久久久久久久久久久| 欧美一区二三区| 欧美 日韩 国产在线观看| 欧美日韩国产综合视频在线| 欧美亚洲视频在线观看| 欧美在线观看黄| 男人天堂新网址| 免费99视频| 国产精品一久久香蕉国产线看观看 | 久久亚洲免费| 国产激情在线看| 久久久久欧美| 日韩中文字幕在线看| 国产精品爽爽爽爽爽爽在线观看| 国产精品免费一区二区三区四区| 国产精品久久久久7777| 国产精品国产亚洲精品看不卡15| 国产精品黄页免费高清在线观看 | 精品91一区二区三区| 蜜桃网站成人| 国产精品一区二区性色av| 91美女福利视频高清| 久久99精品久久久久久噜噜| 国产精品久久久精品| 欧美激情精品在线| 亚洲欧美日韩在线综合| 日本精品一区二区三区在线播放视频|