文档章节

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

奋斗到天明
 奋斗到天明
发布于 2015/08/27 16:49
字数 447
阅读 189
收藏 0
点赞 0
评论 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中文乱码问题

大家在JSP的开发过程中,经常出现中文乱码的问题,可能一至困扰着大家,现把JSP开发中遇到的中文乱码的问题及解决办法写出来供大家参考。首先了解一下Java中文问题的由来: Java的内核和cla...

Failure ⋅ 2014/07/31 ⋅ 0

jsp之中文乱码问题

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

双月通天 ⋅ 2015/09/03 ⋅ 0

eclipse插件开发 popupMenu 怎么才能只有右键点击JAVA文件时候才展示插件

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

乱取名字 ⋅ 2016/05/03 ⋅ 0

EMF+GEF的属性页问题

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

青夜之衫 ⋅ 2017/12/06 ⋅ 0

android硬编码h264数据,并使用rtp推送数据流,实现一个简单的直播-MediaCodec(二)

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

xmc281141947 ⋅ 2017/08/02 ⋅ 0

聊聊android源码

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

席道坤 ⋅ 2016/12/12 ⋅ 0

使用 Eclipse CNF 的 Saveable Protocol 实现对 View 的保存

简介: Editor 和 View 是 Eclipse 中用于展示和管理资源的两种 UI 元素。Editor 提供了一套方便的机制帮助用户实现对资源的修改及保存。但对于 View,它在很大程度上提供是对资源的树形展示...

小编辑 ⋅ 2010/05/18 ⋅ 0

node.js之websocket协议的实现

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

L3ve ⋅ 2014/10/08 ⋅ 0

如何为你的Android应用缩放图片[原创翻译]

很难为你的应用程序得到正确的图像缩放吗?是你的图片过大,造成内存问题?还是图片不正确缩放造成不良用户体验的结果?为了寻求一个好的解决方案,我们咨询了Andreas Agvard(索尼爱立信软件...

迷途d书童 ⋅ 2012/02/22 ⋅ 3

使用Kotlin构建MVVM应用程序—第一部分:入门篇

目录 使用Kotlin构建MVVM应用程序—第一部分:入门篇 使用Kotlin构建MVVM应用程序—第二部分:Retrofit及RxJava 使用Kotlin构建MVVM应用程序—第三部分:Room(敬请期待) 写在前面 使用DataB...

ditclear ⋅ 2017/11/18 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

个人博客的运营模式能否学习TMALL天猫质量为上?

心情随笔|个人博客的运营模式能否学习TMALL天猫质量为上? 中国的互联网已经发展了很多年了,记得在十年前,个人博客十分流行,大量的人都在写博客,而且质量还不错,很多高质量的文章都是在...

原创小博客 ⋅ 今天 ⋅ 0

JavaScript零基础入门——(十一)JavaScript的DOM操作

JavaScript零基础入门——(十一)JavaScript的DOM操作 大家好,欢迎回到我们的JavaScript零基础入门。最近有些同学问我说,我讲的的比书上的精简不少。其实呢,我主要讲的是我在开发中经常会...

JandenMa ⋅ 今天 ⋅ 0

volatile和synchronized的区别

volatile和synchronized的区别 在讲这个之前需要先了解下JMM(Java memory Model :java内存模型):并发过程中如何处理可见性、原子性、有序性的问题--建立JMM模型 详情请看:https://baike.b...

MarinJ_Shao ⋅ 今天 ⋅ 0

深入分析Kubernetes Critical Pod(一)

Author: xidianwangtao@gmail.com 摘要:大家在部署Kubernetes集群AddOn组件的时候,经常会看到Annotation scheduler.alpha.kubernetes.io/critical-pod"="",以表示这是一个关键服务,那你知...

WaltonWang ⋅ 今天 ⋅ 0

原子性 - synchronized关键词

原子性概念 原子性提供了程序的互斥操作,同一时刻只能有一个线程能对某块代码进行操作。 原子性的实现方式 在jdk中,原子性的实现方式主要分为: synchronized:关键词,它依赖于JVM,保证了同...

dotleo ⋅ 今天 ⋅ 0

【2018.06.22学习笔记】【linux高级知识 14.4-15.3】

14.4 exportfs命令 14.5 NFS客户端问题 15.1 FTP介绍 15.2/15.3 使用vsftpd搭建ftp

lgsxp ⋅ 今天 ⋅ 0

JeeSite 4.0 功能权限管理基础(Shiro)

Shiro是Apache的一个开源框架,是一个权限管理的框架,实现用户认证、用户授权等。 只要有用户参与一般都要有权限管理,权限管理实现对用户访问系统的控制,按照安全规则或者安全策略控制用户...

ThinkGem ⋅ 昨天 ⋅ 0

python f-string 字符串格式化

主要内容 从Python 3.6开始,f-string是格式化字符串的一种很好的新方法。与其他格式化方式相比,它们不仅更易读,更简洁,不易出错,而且速度更快! 在本文的最后,您将了解如何以及为什么今...

阿豪boy ⋅ 昨天 ⋅ 0

Python实现自动登录站点

如果我们想要实现自动登录,那么我们就需要能够驱动浏览器(比如谷歌浏览器)来实现操作,ChromeDriver 刚好能够帮助我们这一点(非谷歌浏览器的驱动有所不同)。 一、确认软件版本 首先我们...

blackfoxya ⋅ 昨天 ⋅ 0

线性回归原理和实现基本认识

一:介绍 定义:线性回归在假设特证满足线性关系,根据给定的训练数据训练一个模型,并用此模型进行预测。为了了解这个定义,我们先举个简单的例子;我们假设一个线性方程 Y=2x+1, x变量为商...

wangxuwei ⋅ 昨天 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部