文档章节

解码Eclipse架构:IAdaptable-第二部分-简单例子

奋斗到天明
 奋斗到天明
发布于 2015/08/27 16:49
字数 447
阅读 195
收藏 0

适配器设计模型 适配器设计模式是怎么在Eclipse中使用?Eclipse平台Runtime有一个很好的例子。 首先,适配器设计模式的背后有一个简单的意图——封装一个对象,让他适用于客服端的其他接口,你可以在我 前面的文章中看到一个简单的适配器意图。 Eclipse中适配器的使用有略微不同和更多重复,在下面的例子,为了简单起见类与接口都放在一个文件中。 下面展现了类的继承关系 

  

当我们想把橘子变成苹果,适配器就来了,下面我们看看他怎么做,在Eclipse中没有重复工作。

interface IAdaptable{
  public Object getAdapter(Class adapter);
}
 
interface IApple extends IAdaptable{ }
 
interface IOrange{ }
 
class Orange implements IOrange{ }
 
interface IPear{ }
 
class Pear implements IPear{ }
 
public class Apple implements IApple{  
  @Override
  public Object getAdapter(Class adapter) {
    //the real story should be forwarding the request to the platform to get adapter
    return PlatformAdapterManager.getAdapter(this, adapter);
  }  
}
 
class PlatformAdapterManager{
  public static Object getAdapter(Object o, Class adapter){
    if(adapter == IOrange.class){
      if(o instanceof Apple){
        return new Orange(); //Read code use an adapter to wrap the apple object and return an adapter object which implements IApple interface
      }
    }else if(adapter == IPear.class){
      if(o instanceof Apple){
        return new Pear();
      }
    }
    return null; //return null when the class does not implement the interface.
  }
}

PlatformAdapterManager 类是完全编造的,Eclipse中事实是platfrom得到一个适配器管理器然后返回一个正确的适配器。

public class Main {  
  public static void main(String args[]){
    IApple apple = new Apple();
    IOrange orange = (IOrange)apple.getAdapter(IOrange.class);
 
    if(orange == null){
      System.out.println("null");
    }else{
      System.out.println(orange);
    }
 
    IPear pear = (IPear)apple.getAdapter(IPear.class);  
    if(pear == null){
      System.out.println("null");
    }else{
      System.out.println(pear);
    }
  }
}

输出

Output:
Orange@4fe5e2c3
Pear@23fc4bec

在类自己内部,这是一个途径实现getAdapter()方法,这个途径不需要注册在类中,因为他已经继承了getAdapter()方法。 以上文章翻译自: http://www.programcreek.com/2011/09/adapters-in-eclipse/

© 著作权归作者所有

共有 人打赏支持
奋斗到天明
粉丝 18
博文 112
码字总数 82707
作品 0
昌平
程序员
私信 提问
jsp之中文乱码问题

在eclipse里面我们的jsp页面如果我们写了中文,保存的时候会弹出一个框,让你选择保存方式,之所以这样是因为jsp默认的文件编码是ISO-8859-1字符集中无中文字符。 一个比较好的解决办法是在这...

双月通天
2015/09/03
119
0
EMF+GEF的属性页问题

最近有朋友问使用EMF作为GEF模型时,如何在选中editpart时在属性页里显示属性的问题。是的,因为GEF是这样判断是否填充属性 页的: public Object getAdapter(Class key) { if (IPropertySou...

青夜之衫
2017/12/06
0
0
android硬编码h264数据,并使用rtp推送数据流,实现一个简单的直播-MediaCodec(二)

上篇博客是使用MediaCodec编码摄像头预览数据成h264数据,并用rtp发送实时数据流。这篇博客是接收h264数据流MediaCodec解码并显示。 先上代码的结构图: eclipse的工程,接收端比较简单只有两...

xmc281141947
2017/08/02
0
0
node.js之websocket协议的实现

websocket已经不是什么新鲜的东西了,要在node.js上实现也有socket.io这样好用的第三方模块.但是个人有代码洁癖,实在是受不了在HTML页面上多出一行如下代码: <script src='http://192.168.0.1...

L3ve
2014/10/08
0
0
哈,喷下架构。。。

换换脑子,看了职业板块一个架构的帖子,我就独立开贴喷下我对架构的理解。 架构和系统有关系,但不是系统的东西。简单说,架构是对系统组成结构的抽象。 好吧, 我承认, 我是用了一个概念,...

中山野鬼
2016/06/13
1K
15

没有更多内容

加载失败,请刷新页面

加载更多

js垃圾回收机制和引起内存泄漏的操作

JS的垃圾回收机制了解吗? Js具有自动垃圾回收机制。垃圾收集器会按照固定的时间间隔周期性的执行。 JS中最常见的垃圾回收方式是标记清除。 工作原理:是当变量进入环境时,将这个变量标记为“...

Jack088
昨天
17
0
大数据教程(10.1)倒排索引建立

前面博主介绍了sql中join功能的大数据实现,本节将继续为小伙伴们分享倒排索引的建立。 一、需求 在很多项目中,我们需要对我们的文档建立索引(如:论坛帖子);我们需要记录某个词在各个文...

em_aaron
昨天
27
0
"errcode": 41001, "errmsg": "access_token missing hint: [w.ILza05728877!]"

Postman获取微信小程序码的时候报错, errcode: 41001, errmsg: access_token missing hint 查看小程序开发api指南,原来access_token是直接当作parameter的(写在url之后),scene参数一定要...

两广总督bogang
昨天
31
0
MYSQL索引

索引的作用 索引类似书籍目录,查找数据,先查找目录,定位页码 性能影响 索引能大大减少查询数据时需要扫描的数据量,提高查询速度, 避免排序和使用临时表 将随机I/O变顺序I/O 降低写速度,占用磁...

关元
昨天
15
0
撬动世界的支点——《引爆点》读书笔记2900字优秀范文

撬动世界的支点——《引爆点》读书笔记2900字优秀范文: 作者:挽弓如月。因为加入火种协会的读书活动,最近我连续阅读了两本论述流行的大作,格拉德威尔的《引爆点》和乔纳伯杰的《疯传》。...

原创小博客
昨天
35
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部