java 适配器模式示例

一、定义

​ 适配器模式用于解决接口间的兼容问题。

​ 当我们需要使用某个类提供的接口,但是这个接口与现在的系统需求不符,由于该接口是由第三方提供的,或者是已经在生产上跑了很久的存量类,我们不想通过改变这个类来满足现在系统的需求,那么这时候就可以考虑通过将目标类封装成一个满足系统需求的新类,因此适配器(Adapter)也称为包装器(Wrapper)。

二、示例

​ 平常生活中手机耳机插口慢慢开始从3.5mm接口换成了typec接口,但是还有3.5mm的耳机需要在Type-C上的手机使用,这个时候就需要个转接头,这就是适配模式,下面将用代码实现:

2.1 目标接口

package com.xy.adapter.headset;/*** typec 接口*/
public interface TypeCInterface {/*** 插入typec接口*/void typec();
}

2.2 适配者类(被适配的对象)

/*** @Description: 3.5接口耳机* @author: xy* @date: 2022年10月10日 17:18*/
public class HeadPhoneThreePointFive {/*** 插入3.5mm毫米接口*/void threePointFive(){System.out.println("插入耳机3.5mm接口");}
}

2.3 适配器(对象适配器模式)

package com.xy.adapter.headset;/*** @Description: 耳机适配器(装接头) 对象适配器模式* @author: xy* @date: 2022年10月10日 17:16*/
public class HeadPhoneAdapter implements TypeCInterface{private HeadPhoneThreePointFive headPhoneThreePointFive;HeadPhoneAdapter(HeadPhoneThreePointFive headPhoneThreePointFive){this.headPhoneThreePointFive = headPhoneThreePointFive;}@Overridepublic void typec() {System.out.println("插入耳机转接头typec接口~");headPhoneThreePointFive.threePointFive();}
}

2.4 适配器 (类适配器模式)

package com.xy.adapter.headset;/*** @Description: 耳机适配器(装接头) 类适配器模式* @author: xy* @date: 2022年10月10日 17:16*/
public class HeadPhoneAdapter2 extends HeadPhoneThreePointFive implements TypeCInterface {@Overridepublic void typec() {System.out.println("插入耳机转接头typec接口~");super.threePointFive();}
}

2.5 类适配器和对象适配器区别

类适配器:适配器Adapter继承我们的被适配者Adaptee,并实现目标接口Target。由于Java中是单继承,所以这个适配器仅仅只能服务于所继承的被适配者Adaptee。优点是适配器中可以复写被适配者方法,使得适配器更加灵活,缺点是java中只支持单继承,所以这个适配器只能为单个适配者服务

对象适配器:适配器Adapter实现目标接口Target,将被适配者Adatee使用组合的方式,通过适配器构造函数传递进来。优点是因为是组合的方式,所以可以将多个适配者适配到同一目标,缺点:如果要复写适配者的功能就不容易。

总结:尽量使用对象适配器的实现方式,多用组合、少用继承。

2.6 运行

package com.xy.adapter.headset;/*** @Description: 手机* @author: xy* @date: 2022年10月10日 17:13*/
public class Phone implements TypeCInterface {@Overridepublic void typec() {System.out.println("插入手机typec接口");}public static void main(String[] args) {TypeCInterface phone = new Phone();phone.typec();TypeCInterface headPhoneAdapter = new HeadPhoneAdapter(new HeadPhoneThreePointFive());
//      TypeCInterface headPhoneAdapter2 = new HeadPhoneAdapter2();headPhoneAdapter.typec();
//      headPhoneAdapter2.typec();}
}

三、适配器模式和装饰者模式的区别

从结构上来说:装饰者模式中装饰者和被装饰者具有共同的超类,而适配器模式是将需要适配的对象以组合的方式实现

从定义上来说,装饰者模式是对对象进行附加功能,而适配器是对对象进行转换,例如一个电源插座,为这个插座添加防短路,防漏电功能,这种就是装饰者模式,而将一个国标的插头转换为英标标的插头,这种就是适配器模式,对目标对象进行转换适配。

java 适配器模式示例相关推荐

  1. Java设计模式 - 示例教程

    Java设计模式 - 示例教程 设计模式在软件开发人员中非常流行.设计模式是针对常见软件问题的良好描述的解决方案.我已经写了很多关于java设计模式的文章.您可以订阅我们的时事通讯下载PDF电子书(1 ...

  2. java 设计模式 示例_Java设计模式–示例教程

    java 设计模式 示例 Design Patterns are very popular among software developers. A design pattern is a well- ...

  3. java适配器模式例子_java适配器模式实例解析

    适配器模式作为一种结构型设计模式,在软件系统设计开发中使用到的频率非常之高,深受开发人员的青睐.本文会讲解适配器模式的知识要点,以及在实际项目中所使用的真实案例. 1.适配器模式概述: 适配器模式(A ...

  4. 大数据 java 代码示例_功能Java示例 第7部分–将失败也视为数据

    大数据 java 代码示例 这是称为" Functional Java by Example"的系列文章的第7部分. 我在本系列的每个部分中开发的示例是某种"提要处理程序 ...

  5. java方法示例注释 @_Java 8中的功能接口是什么? @功能注释和示例

    java方法示例注释 @ 函数接口是Java 8最重要的概念之一,实际上为lambda表达式提供了动力,但是许多开发人员没有首先了解函数接口在Java 8中的作用就花了很多精力来理解它,并花时间学习l ...

  6. java 方法 示例_Java 9示例–收集的工厂方法–创建不可修改的列表,集合和映射...

    java 方法 示例 大家好,这是我在该博客上发表的有关Java 9功能的第一篇文章,今天您将了解我最喜欢的功能"收集的工厂方法" ,它是JEP 269的一部分.JEP代表JDK增 ...

  7. java 观察者模式示例_观察者设计模式示例

    java 观察者模式示例 本文是我们名为" Java设计模式 "的学院课程的一部分. 在本课程中,您将深入研究大量的设计模式,并了解如何在Java中实现和利用它们. 您将了解模式如 ...

  8. java 泛型示例_使用Java泛型的模板方法模式示例

    java 泛型示例 如果您发现除了某些部分外,您的许多例程完全相同,那么您可能需要考虑使用Template Method来消除容易出错的代码重复 . 这是一个示例:下面是两个做类似事情的类: 实例化并 ...

  9. java 设计模式 示例_Java中的状态设计模式–示例教程

    java 设计模式 示例 状态模式是行为设计模式之一 . 当对象根据其内部状态更改其行为时,将使用状态设计模式. 如果必须根据对象的状态更改其行为,则可以在对象中使用状态变量,并使用if-else条件 ...

最新文章

  1. 谷歌X实验室的“无用”发明
  2. 程矢Axure夜话:Axure基础系列视频教程之图片自动播放鼠标悬停
  3. 通过几个例子看sed的模式空间与保持空间
  4. 【Python】爬虫学习
  5. 不好意思,我真的不知道MySQL的窗口函数...
  6. c 实现走迷宫流程图_c语言迷宫问题程序功能介绍.设计思路.数据结构设计及用法说明程序结构(流程图).各模块的功能及程序说明....
  7. 区块链——据说现在这玩意很火?
  8. Windows 10下使用Xshell5连接虚拟机的ubuntu18系统
  9. QT - 实例 - Qt实现局域网聊天工具软件
  10. Java调用WebService的几种方式
  11. Java8(JDK1.8)新特性
  12. 数学建模解决出版社资源配置问题
  13. 变电站计算机监控 规范,110kV变电站计算机监控系统技术规范书.docx
  14. linux 查看文件内容的命令
  15. 小程序数据缓存机制应用
  16. ERD Online 4.0.0新版本震撼来袭,超强国产免费在线数据建模系统
  17. boost::stacktrace::detail相关的测试程序
  18. taobao.product.get淘宝天猫oAuth2.0商品API接口
  19. 使用OpenCV调用摄像头检测人脸并截图-Python
  20. iOS音乐播放器小技巧

热门文章

  1. 我更改过的KesionCMS V9.0 免费版
  2. matlab 流固耦合,一种基于MATLAB-ANSYS软件的静压溜板流固耦合工作性能的计算方法与流程...
  3. UNIX Crom 任务调度配置语法
  4. Dell服务器IPMI工具远程唤醒开机
  5. 保姆级教程 | Java 8 安装及环境变量配置
  6. Java Class05
  7. SQL 错误 [1064] [42000]: The partition column could not be aggregated column
  8. 儿童编程 python培训
  9. java读取证书公钥
  10. 图解 TCMalloc