文档章节

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

奋斗到天明
 奋斗到天明
发布于 2015/08/27 16:49
字数 447
阅读 191
收藏 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
eclipse插件开发 popupMenu 怎么才能只有右键点击JAVA文件时候才展示插件

eclipse插件开发 popupMenu 右键点击JAVA文件时候才展示插件 plugin.xml 文件如下

乱取名字
2016/05/03
121
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
聊聊android源码

作者:墨小西 链接:https://www.zhihu.com/question/19759722/answer/17019083 来源:知乎 这是前言 在Android系统源码上摸索4年,说说我的看法: 显然Eclipse不是阅读Android源码的好工具,...

席道坤
2016/12/12
4
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

MySQL 乱七八糟的可重复读隔离级别实现

MySQL 乱七八糟的可重复读隔离级别实现 摘要: 原文可阅读 http://www.iocoder.cn/Fight/MySQL-messy-implementation-of-repeatable-read-isolation-levels 「shimohq」欢迎转载,保留摘要,谢...

DemonsI
42分钟前
2
0
Spring源码阅读——2

在阅读源码之前,先了解下Spring的整体架构: 1、Spring的整体架构 1. Ioc(控制反转) Spring核心模块实现了Ioc的功能,它将类与类之间的依赖从代码中脱离出来,用配置的方式进行依赖关系描...

叶枫啦啦
今天
1
0
jQuery.post() 函数格式详解

jquery的Post方法$.post() $.post是jquery自带的一个方法,使用前需要引入jquery.js 语法:$.post(url,data,callback,type); url(必须):发送请求的地址,String类型 data(可选):发送给后台的...

森火
今天
0
0
referer是什么意思?

看看下面这个回答(打不开网页可以把网址复制到搜索栏): https://zhidao.baidu.com/question/577842068.html

杉下
今天
1
0
使用U盘安装CentOS-解决U盘找不到源

1. 使用UltraISO制作CentOS安装盘 如果需要安装带界面的系统,为保证安装顺利,可选择Everything版本的ISO制作安装盘。 2. 在BIOS中选择使用U盘安装 系统启动后,进入安装选择界面,其中有三...

Houor
今天
1
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部