适配器模式(Adapter Class/Object)

是指将一个接口转换成客户端希望的另外一个接口,该模式使得原本不兼容的类可以一起工作。

举个例子:macbook pro有一个HDMI接口,一条HDMI接口的数据线,现在要外接显示器,而显示器只有VGI接口,我们需要一个HDMI-VGI转换器,这个转换器其实起到的作用就是适配器,让两个不兼容的接口可以一起工作。

类图:

适配器有4种角色:

  • 1.目标抽象角色(Target):定义客户所期待的使用接口。(GVI接口)

  • 2.源角色(Adaptee):需要被适配的接口。(HDMI接口)

  • 3.适配器角色(Adapter):把源接口转换成符合要求的目标接口的设备。(HDMI-VGI转换器)

  • 4.客户端(client):例子中指的VGI接口显示器。

把HDMI接口转换成VGI接口,使得macbook pro可以外接显示器。

//HDMI接口,需要被适配的接口
public interface HDMIPort {void workByHDMI();
}
//VGI接口,客户端所期待的接口
public interface VGIPort {void workByVGI();
}
//将HDMI接口转换为VGI,这就是适配器
public class HDMIToVGI implements VGIPort{HDMIPort hdmiPort;public HDMIToVGI(HDMIPort hdmiPort) {this.hdmiPort = hdmiPort;}//将HDMI接口转换为VGI接口@Overridepublic void workByVGI() {hdmiPort.workByHDMI();}
}
public static void main(String[] args) {//定义一个HDMI接口HDMIPort hdmiPort = new HDMIPort() {@Overridepublic void workByHDMI() {//hdmi接口工作方式}};//将HDMI接口转换为VGI接口VGIPort vgiPort = new HDMIToVGI(hdmiPort);//经过转换HDMI接口变成了VGI接口vgiPort.workByVGI();}

总结

适配器模式优点:

  • 1.可以让任何两个没有关联的类一起运行。

  • 2.提高了类的复用。

  • 3.增加了类的透明度。

  • 4.灵活性好。

适配器模式缺点:过多地使用适配器,会让系统非常零乱,不易整体进行把握。

适用场景:

  • 1.系统需要使用现有的类,而此类的接口不符合系统的需要。

  • 2.想要建立一个可以重复使用的类,用于与一些彼此之间没有太大关联的一些类,包括一些可能在将来引进的类一起工作,这些源类不一定有一致的接口。

  • 3.通过接口转换,将一个类插入另一个类系中。

Test

package com.qbz.test;//MicroUSB接口,客户端所期待的接口
interface MicroUSB {void process();
}// USBTypec接口,需要被适配的接口
interface USBTypec {void process();
}class Phone implements MicroUSB {@Overridepublic void process() {System.out.println("使用MicroUSB接口进行充电");}
}class Car implements USBTypec {@Overridepublic void process() {System.out.println("使用USBTypec接口进行充电");}
}// 适配器,将USBTypec接口转换成MicroUSB
class USBTypecToMicroUSB implements MicroUSB {USBTypec usbTypec;public USBTypecToMicroUSB(USBTypec usbTypec) {this.usbTypec = usbTypec;}@Overridepublic void process() {System.out.println("USBTypec接口转换成MicroUSB");// 将USBTypec接口转换成MicroUSB接口usbTypec.process();}
}public class Main {public static void main(String[] args) {USBTypec usbTypec = new Car();USBTypecToMicroUSB tTom = new USBTypecToMicroUSB(usbTypec);tTom.process();}}

输出:

USBTypec接口转换成MicroUSB
使用USBTypec接口进行充电

适配器模式(Adapter Class/Object)相关推荐

  1. 设计模式之适配器模式(Adapter Class/Object)

    1.解析 定义 : 将一个类的接口转换成客户希望的另外一个接口.Adapter模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作; 宗旨 : 保留现有类所提供的服务,向客户提供接口,以满足客 ...

  2. 乐在其中设计模式(C#) - 适配器模式(Adapter Pattern)

    [索引页] [源码下载] 乐在其中设计模式(C#) - 适配器模式(Adapter Pattern) 作者:webabcd 介绍 将一个类的接口转换成客户希望的另外一个接口.Adapter模式使得原本 ...

  3. c++适配器模式adapter

    适配器模式adapter 概念 角色和职责 案例 概念 Adapter模式也叫适配器模式,是构造型模式之一,通过Adapter模式可以改变已有类(或外部类)的接口形式. 角色和职责 适用于: 是将一个 ...

  4. 【设计模式】—— 适配器模式Adapter

    模式意图 如果已经有了一种类,而需要调用的接口却并不能通过这个类实现.因此,把这个现有的类,经过适配,转换成支持接口的类. 换句话说,就是把一种现有的接口编程另一种可用的接口. 模式结构 [类的适配器 ...

  5. 『设计模式』适配器模式(Adapter)

    23种设计模式+额外常用设计模式汇总 (持续更新) 适配器模式(Adapter) 适配器模式把一一个类的接口变换成客户端所期待的另一种接口,从而使原本接口不匹配而无法在一起工作的两个类能够在一起工作. ...

  6. 【设计模式】适配器模式 Adapter Pattern

    适配器模式在软件开发界使用及其广泛,在工业界,现实中也是屡见不鲜.比如手机充电器,笔记本充电器,广播接收器,电视接收器等等.都是适配器. 适配器主要作用是让本来不兼容的两个事物兼容和谐的一起工作.比如 ...

  7. 结构型模式——适配器模式(Adapter)

    文章目录 什么是适配器模式 适配器模式的结构 代码展示 定义目标类和目标接口 定义电脑类 编写测试类 适配器模式测试 定义适配者类接口和子类对象 定义适配器类 编写测试类 整体类型结构图 结论 弊端 ...

  8. 设计模式(五)适配器模式Adapter(结构型)

    设计模式(五)适配器模式Adapter(结构型) 1. 概述: 接口的改变,是一个需要程序员们必须(虽然很不情愿)接受和处理的普遍问题.程序提供者们修改他们的代码;系统库被修正;各种程序语言以及相关库 ...

  9. 设计模式之适配器模式(Adapter)摘录

    23种GOF设计模式一般分为三大类:创建型模式.结构型模式.行为模式. 创建型模式抽象了实例化过程,它们帮助一个系统独立于如何创建.组合和表示它的那些对象.一个类创建型模式使用继承改变被实例化的类,而 ...

最新文章

  1. matlab入门学习2
  2. AjaxControlToolkit HoverMenuExtender 控件演示
  3. the resource is not on the build path of a java project错误
  4. 空间注意力机制sam_Attention注意力机制介绍
  5. 二叉树经典题之从前序和中序遍历构建二叉树
  6. python之字符编码(四)
  7. Idea Intellij 常用快捷键
  8. netstat命令---Linux查看网络和socket信息
  9. dubbo 运行过程
  10. Mendeley Destop引用格式自定义调整
  11. C语言【微项目17】—DustBase微尘数据库[自制键值对数据库][超轻量]【2022-03-23】
  12. PS颜色模式及修图工具
  13. 2021年道路运输企业主要负责人模拟考试题库及道路运输企业主要负责人实操考试视频
  14. 缠中说禅108课》87:逗庄家玩的一些杂史 4
  15. Mysql的日志详解(详细)
  16. 利用TabNet进行股票长线预测
  17. 25A - IQ test
  18. 洛谷 P3386 【模板】二分图匹配
  19. 急!急!急!如何申请公网ip
  20. 双十一结束了,但AI的退货“打怪之旅”刚刚开始

热门文章

  1. Android Studio DDMS
  2. 百姓网上怎么引流?百姓网如何发帖引流?百姓网如何推广?
  3. “”中国制造“”高速数据采集卡
  4. java web.xml位置_java – websphere ibm-web-bnd.xml是否有新的架构位置?
  5. 《网络编程》基本 UDP 套接字编程
  6. 双时格林函数应用介绍
  7. 【Pytorch】torch.nn.Dropout()
  8. 科技点亮课堂,智能黑板解决方案
  9. 实验三 字符类型及其操作(新)
  10. 智慧零售erp通用版管理系统+门店管理+商品管理+厂商管理+财务管理+销售管理+仓储管理+零售行业+web端管理系统+新零售管理后台+电商erp+收银系统+CRM系统+新零售o2o平台系统