★ Eclipse的Adapter机制

使用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">

 
 
 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值