适配器模式说明

适配器模式(Adapter) 通常也被称为转换器,当一个对象或类的接口不能匹配用户所期待的接口时,适配器就充当中间转换的角色,以达到兼容用户接口的目的,同时适配器也实现了客户端与接口的解耦,提高了组件的可复用性

充当一个适配、兼容的工作

例子

两插脚的电子设备如何使用三孔插座实现通电,开启电视

● Target(目标接口):客户端要使用的目标接口标准,对应本章例程中的三相插孔接口TriplePin。

● Adapter(适配器):实现了目标接口,负责适配(转换)被适配者的接口specificRequest()为目标接口request(),对应本章例程中的电视机专属适配器类TVAdapter。

● Adaptee(被适配者):被适配者的接口标准,目前不能兼容目标接口的问题接口,可以有多种实现类,对应本章例程中的两相插孔接口DualPin。

● Client(客户端):目标接口的使用者。

对象适配器/类适配器

二者的区别在于前者的Adaptee(被适配者)以接口形式出现并被Adapter(适配器)引用,而后者则以父类的角色出现并被Adapter(适配器)继承,所以前者更加灵活,后者则更为简便,适配器需要具备适配双方的基本功能,才能做到兼容,相互对接

类适配器不利于扩展,具体场景下还是具体实用性

实例代码

package com.azure.design.adapter;/*** 两孔接口*/
public interface DualPin {// 火、零public void electrify (int l, int n);
}
package com.azure.design.adapter;/*** 三孔接口*/
public interface TriplePin {// 火、地、零public void electrify (int l, int n, int e);
}
package com.azure.design.adapter;import com.azure.design.proxy.dymaicproxy.UserService;public class TV implements DualPin {@Overridepublic void electrify(int l, int n) {System.out.print("接通火线:" + l  + ",零线:" + n + "!" );System.out.println("电视开了" );}
}
package com.azure.design.adapter;/****/
public class Adapter implements TriplePin{private DualPin dualPin;// 创建适配器时, 将两插设备注入public Adapter(DualPin dualPin) {this.dualPin = dualPin;}@Overridepublic void electrify(int l, int n, int e) {// 调用三插接口的方法实际上调的时两插接口的方法dualPin.electrify(l, n);}
}
package com.azure.design.adapter;/*** 电视专属适配器*/
public class TVAdapter extends TV implements TriplePin{@Overridepublic void electrify(int l, int n, int e) {super.electrify(l, n);}
}
package com.azure.design.adapter;import org.junit.Test;public class Client {/*** 对象适配器*/@Testpublic void tesAdapterDemo() {Adapter adapter = new Adapter(new TV());adapter.electrify(1,0,-1);}/*** 专属适配器*/@Testpublic void tesTVAdapterDemo() {TVAdapter adapter = new TVAdapter();adapter.electrify(1,0,-1);}
}

适配器(Adapter)相关推荐

  1. 设计模式学习笔记——适配器(Adapter)模式

    设计模式学习笔记--适配器(Adapter)模式 @(设计模式)[设计模式, 适配器模式, adapter, 适配器] 设计模式学习笔记适配器Adapter模式 基本介绍 适配器案例 类适配器模式 类 ...

  2. 如何定义适配器adapter类_设计模式22-Adapter(适配器)模式-组件接口适配

    在软件开发过程中,有时候系统的数据和行为都正确,但接口不符合,这时候我们就应该考虑使用适配器模式,适配器的作用即将一个类的接口转换成客户希望的另外一个接口.它使得原本由于接口不兼容而不能一起工作的那些 ...

  3. Ruby设计模式透析之 —— 适配器(Adapter)

    转载请注明出处:http://blog.csdn.net/guolin_blog/article/details/9400153 此为Java设计模式透析的拷贝版,专门为Ruby爱好者提供的,不熟悉R ...

  4. apollo学习基础之三[适配器adapter学习]

    apollo学习基础之三[适配器adapter学习] 目录 apollo学习基础之三[适配器adapter学习] 1.适配封装设计 2. AdapterManager的设计 3.总结归纳: 我们知道, ...

  5. Java 事件适配器 Adapter

    事件适配器Adapters 在上一篇文章中: http://www.cnblogs.com/mengdd/archive/2013/02/06/2908241.html 第二个例子中,可以看到要实现相 ...

  6. 超级封装RecyclerView的适配器Adapter 只需二三十行代码

    前言 android开发中,RecyclerView是很常用的控件,而且功能也很强大,并且各种三方封装或者扩展库也是非常多,如:BaseQuickAdapter,XRecyclerview,当然还有我 ...

  7. android适配器Adapter

    一.什么是适配器,适配器有什么用? 适配器是AdapterView视图(如ListView - 列表视图控件.Gallery - 缩略图浏览器控件.GridView - 网格控件.Spinner - ...

  8. 设计模式--适配器(Adapter)模式

    模式定义 将一个类的接口转换成客户希望的另一个接口,适配器模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作 类图 应用场景 1.当你希望使用某些现有类,但其接口与你的其他代码不兼容时: 2 ...

  9. 封装的适配器 adapter

    //封装的适配器类 adapter public class NewJobAdapter extends BaseAdapter{ private List<Map<String, Obj ...

  10. java设计模式adapter_Java设计模式--适配器(Adapter)模式

    适配器模式把一个类的接口变换成客户端所期待的另一种接口,从而使原本因接口不匹配而无法在一起工作的两个类能够在一起工作. 适配器模式的用途 用电器做例子,笔记本电脑的插头一般都是三相的,即除了阳极.阴极 ...

最新文章

  1. View事件分发机制(源码分析篇)
  2. xtrabackup 恢复单个表【转】
  3. c语言如何获取串口列表,如何通过串口来读写数据,请教达人
  4. java如何使用类数组_java – 如何使用泛型与数组的类?
  5. DBMS-数据库设计与E-R模型:E-R模型、约束、E-R图、E-R扩展特性、E-R图转换为关系模式、UML建模...
  6. 用vb.net实现拖放功能
  7. HCIE Secuirty 防火墙IPS功能和NIP 备考笔记(幕布)
  8. 关于我对区块链和比特币的看法
  9. 召回2014年8英语个月的道路
  10. Java实现面向对象编程
  11. 建立书签链接的html语言,书签链接
  12. 文件批量重命名怎么加下划线?
  13. libfacedetection 人脸检测库的基本使用
  14. 引用腾讯视频 php代码,调用腾讯视频播放器APi代码
  15. 微软开源人工智能工具和深度学习框架
  16. c++ 定义一个字符栈类Stack(包括类的实现)。数据成员包括一个存放字符的数组stck[ ]和一个栈指针tos。栈数组的尺寸由常量SIZE确定。栈的基本操作为Push()和Pop()。
  17. ssd固态硬盘寿命查询检测 SsdDiskInfo工具
  18. html5 端午节 龙舟,端午节赛龙舟作文5篇
  19. python数据类型(字典)
  20. jenkins的热部署_Jenkins+tomcat自动发布的热部署/重启及遇到的问题解决办法(推荐)...

热门文章

  1. 真正免费的证件照小程序,在线一键生成标准免冠证件照,证件照底色更换,证件照尺寸修改
  2. 揭秘本世纪惊心动魄的粮食战争!中国反败为胜,但国际粮商仍未服输
  3. 《技术人创业攻略》-用技术改变世界!
  4. 深度测评 | 五大主流多端开发框架全面对比
  5. vue报错 | Duplicate keys detected: ‘0’. This may cause an update error.
  6. JPEG 推荐的DC和AC系数的huffman(哈夫曼)码表
  7. 第五届蓝桥杯java试题答案_2014年第五届蓝桥杯省赛试题(JavaA组)
  8. (专升本)PowerPoint(设置幻灯片的动画效果)
  9. html 广告加载页面,JS广告代码延迟加载或是最后加载加快页面载入
  10. 人工智能“乐高模式”,人工智能进入变革时代