今天学习了一下java中的适配器模式,在这里做个记录,方便以后查看

什么是适配器,适配就是连接源到目标的中间件,简单的例子就是我们的港水货手机充电器是大三角,我们想要在大陆正常使用我们需要一个转接充电器,那么这个接上了转接器的充电器就是适配器。

概念:适配器模式将一个接口转换成客户希望的另外一个接口。它使得原来由于接口不兼容而不能在一起工作的那些类可以一起工作。

使用场景:

  开发功能需要升级,希望使用现有的类中的已有功能进行拓展,直接修改现有类也是一种方法,但这不符合系统设计高内聚、低耦合的的原则,于是我们使用适配器模式,这样就能解决系统设计前期设计上的不足(ps:开发中前期设计很重要)或者适应新出现的需求。

模式中涉及到的角色:

  目标接口(Target):客户所期待的接口。目标可以是具体的或抽象的类,也可以是接口。

  需要适配的类(Adaptee):需要适配的类或适配者类。

   适配器(Adapter):通过包装一个需要适配的对象,把原接口转换成目标接口。  

用代码说话:

现在我们有一个源是一个对象机器人,他的现有能力是说英语和日语,现在我们需要他能说法语,那么现在我们要将机器人适配成能够说英语日语和法语的机器人。需要怎样做呢?

已有“源”代码,机器人

public class Robot{

    private String name;

    public void speakJapanese(){
System.out.println("I can speak Japanese!");
} public void speakEnglish(){
System.out.println("I can speak English!");
}
...
}

目标接口代码:

public interface Job {  

    public abstract void speakJapanese();
public abstract void speakEnglish();
public abstract void speakFrench(); }

使用类适配器模式:

public class Adapter extends Robot implements Job{  

    public void speakFrench() {
System.out.println("I can speak French ");
} }

那么何为类适配器模式:

    可以看出来在这里我们使用Adapter继承了类Robot这样我们称为类适配器

使用对象适配器模式:

public class Adapter implements Job {  

    Robot robot ;  

    public Adapter(Robot robot ) {
this.robot = robot ;
} public void speakEnglish() {
robot .speakEnglish();
} public void speakJapanese() {
robot .speakJapanese();
} //new add
public void speakFrench() { } }

对象的适配器模式,把“robot”作为一个构造参数传入适配器,然后执行接口所要求的方法。这种适配模式可以为多个源进行适配。

关于类适配器模式和对象适配器模式:

  java(c#)不支持多重继承,所以类适配器模式只能适配单一源,对象适配器可进行多源适配

对比装饰者模式:

  它们都可以用来包装对象,本质区别在于

  1. 适配器模式:将一个接口转换成另外一个接口。
  2. 装饰者模式:不改变接口,只加入职责。

java适配器模式随笔记的更多相关文章

  1. Java基础复习笔记系列 九 网络编程

    Java基础复习笔记系列之 网络编程 学习资料参考: 1.http://www.icoolxue.com/ 2. 1.网络编程的基础概念. TCP/IP协议:Socket编程:IP地址. 中国和美国之 ...

  2. Java基础复习笔记系列 八 多线程编程

    Java基础复习笔记系列之 多线程编程 参考地址: http://blog.csdn.net/xuweilinjijis/article/details/8878649 今天的故事,让我们从上面这个图 ...

  3. Java基础复习笔记系列 七 IO操作

    Java基础复习笔记系列之 IO操作 我们说的出入,都是站在程序的角度来说的.FileInputStream是读入数据.?????? 1.流是什么东西? 这章的理解的关键是:形象思维.一个管道插入了一 ...

  4. Java基础复习笔记系列 五 常用类

    Java基础复习笔记系列之 常用类 1.String类介绍. 首先看类所属的包:java.lang.String类. 再看它的构造方法: 2. String s1 = “hello”: String ...

  5. Java基础复习笔记系列 四 数组

    Java基础复习笔记系列之 数组 1.数组初步介绍? Java中的数组是引用类型,不可以直接分配在栈上.不同于C(在Java中,除了基础数据类型外,所有的类型都是引用类型.) Java中的数组在申明时 ...

  6. 20145213《Java程序设计学习笔记》第六周学习总结

    20145213<Java程序设计学习笔记>第六周学习总结 说在前面的话 上篇博客中娄老师指出我因为数据结构基础薄弱,才导致对第九章内容浅尝遏止地认知.在这里我还要自我批评一下,其实我事后 ...

  7. [原创]java WEB学习笔记95:Hibernate 目录

    本博客的目的:①总结自己的学习过程,相当于学习笔记 ②将自己的经验分享给大家,相互学习,互相交流,不可商用 内容难免出现问题,欢迎指正,交流,探讨,可以留言,也可以通过以下方式联系. 本人互联网技术爱 ...

  8. java effective 读书笔记

    java effective 读书笔记 []创建和销毁对象 静态工厂方法 就是“封装了底层 暴露出一个访问接口 ” 门面模式 多参数时 用构建器,就是用个内部类 再让内部类提供构造好的对象 枚举 si ...

  9. java JDK8 学习笔记——助教学习博客汇总

    java JDK8 学习笔记——助教学习博客汇总 1-6章 (by肖昱) Java学习笔记第一章——Java平台概论 Java学习笔记第二章——从JDK到IDEJava学习笔记第三章——基础语法Jav ...

随机推荐

  1. -ms-viewport的问题

    Windows 8 中的 Internet Explorer 10 和 Windows Phone 8 Internet Explorer 10 doesn't differentiate devic ...

  2. HTML5边玩边学(1)画布实现方法

    一.<canvas>标签 Html5 引入了一个新的 <canvas> 标签,这个标签所代表的区域就好象一块画布,你的所有图形绘制最后都要在这块画布上呈现.有了这个标签,浏览器 ...

  3. POJ 3177 Redundant Paths POJ 3352 Road Construction

    这两题是一样的,代码完全一样. 就是给了一个连通图,问加多少条边可以变成边双连通. 去掉桥,其余的连通分支就是边双连通分支了.一个有桥的连通图要变成边双连通图的话,把双连通子图收缩为一个点,形成一颗树 ...

  4. json的一些问题

    使用json不仅可以这么写,{"ARCHIVAL_CODE":"String","TDQLR":"String"} 还可 ...

  5. VISIO 2007 修改形状默认字体 自定义模具

    visio 2007的形状的默认字体为8号,比较小,怎样改成默认10号? 首先将一个流程图中所要用的形状都拖到绘图区,然后全选,设置字体为10号,全选,再拖动到形状区,如下图: 点击‘是’,确认修改模 ...

  6. POJ 2378 Tree Cutting (DFS)

    题目链接:http://poj.org/problem?id=2378 一棵树,去掉一个点剩下的每棵子树节点数不超过n/2.问有哪些这样的点,并按照顺序输出. dfs回溯即可. //#pragma c ...

  7. [网络]远程访问局域网svn服务器[转]

    转至:http://8474832.blog.51cto.com/8464832/1555449 打开路由器访问界面 选择转发规则->端口映射-新建 在弹出的界面中填写相应的端口号了内网ip 填 ...

  8. 谈Android四大组件之Service篇

    Service简介 Service是Android系统中的四大组件之一,它是一种长生命周期的,没有可视化界面,运行于后台的一种服务程序.Service必须在AndroidManifest.xml中声明 ...

  9. c\c++ 字符串处理大集合[转]

    rember this strncpy(a,b,); a[]='\0'; ]; memset(a,'#',sizeof(a)); a[]='\0'; 刚开始学C/C++时,一直对字符串处理函数一知半解 ...

  10. HITAG 2 125kHz RFID IC Read-Write 256 bits

    Features 256 bits EEPROM memory organized in 8 pages of 32 bits each 32 bits unique factory programm ...