使用Aosu易博通,一分钱不花,实现网文自动摘抄, 博客写作方便又快捷,和您现在看到的一样 !自主嵌入Google广告,还能赚取美金! 现在就下载 src="http://aosustudio.com.cn//Upload/Articles/070325/fd048511-18fd-4b65-a776-a48ec09fc11d/3860cd0b-402e-4bd0-8593-64fb0d37a21b.html" frameborder="0" width="100%" scrolling="no" height="270"> GoF的Adapter解决了将一种接口适配为另一种接口的方法,例如:将实现了接口A的AImpl适配为接口B,就需要从AImpl继承,同时实现B接口:class BImpl extends AImpl implements B { ... }但是在Eclipse中要将一个Object适配为另外的接口,很可能有很多个,并且在将来还可能需要增加新的接口,而客户端需要动态将该Object适配为自己想要的类型例 如,自己的一个对象MyObject需要适配为IFile对象,如果直接使用Adapter接口,就需要实现IFile接口,这是非常困难的,因此 Eclipse设计了一种Adapter机制,通过实现IAdaptable接口,就能动态查询一个Object是否支持某个接口,如果支持,就将其转化 为该接口的对象例子:我们自己设计的MyObject包含一个IFile引用:class MyObject { private IFile file;}若要将MyObject动态转化为IFile,就需要实现IAdaptable接口:class MyObject implements IAdaptable { private IFile file; public Object getAdapter(Class adapter) { if(adapter.equals(IFile.class)) return file; return null; }}客户端希望将MyObject转型为IFile时,就通过getAdapter方法检测是否能将MyObject转型为IFile:MyObject obj = ...;if(obj instanceof IAdaptable) { IFile file = (IFile) ((IAdaptable)obj).getAdapter(IFile.class); if(file!=null) { // got the file! }}好处:客户端可以动态查询一个Object是否支持某个接口自己的Object不需要通过继承来实现Adapter,因为需要适配的接口越多,类就会越来越复杂扩展极其容易,例如,一个新的客户端需要InputStream而非IFile,就只需要修改getAdapter()方法: public Object getAdapter(Class adapter) { if(adapter.equals(IFile.class)) return file; if(adapter.equals(InputStream.class)) return file.getInputStream(); return null; }原来的客户端不受影响,新的客户端也能正常工作。有 了Adapter机制,就能动态查询任何一个Object能否转型为某一接口。在Eclipse中,许多Object并非IResource类型,但是右 键菜单都能列出Copy, Paste, CVS等操作,就是因为他们实现了IAdaptable接口并有能力转化为IResource额 外的好处:扩展代码与原代码无关,例如Java开发环境的一个Objec可能是IJavaClass对象,扩展对象(例如一个右键菜单Action)不会 引用IJavaClass,而是引用IResource,组件之间没有耦合。Action只需要告诉Eclipse它需要一个IResource, Eclipse就去查询IJavaClass对象并试图将其转化为IResource,若转化成功,该Action就可以出现在右键菜单上。 今日热点: src="http://aosustudio.com.cn/ad/GoogleSerch.htm" frameborder="0" width="100%" scrolling="no" height="30">