@

源码在我的githubgitee中获取

介绍

适配器模式(Adapter Pattern)是作为两个不兼容的接口之间的桥梁。这种类型的设计模式属于结构型模式,它结合了两个独立接口的功能。

这种模式涉及到一个单一的类,该类负责加入独立的或不兼容的接口功能。举个真实的例子,现在我们很多手机没有了耳机的插孔,只留下了type-c的插口,如果我们想使用有线耳机的话就要买一个耳机转type-c的转换器

应用场景

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

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

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

优缺点

  • 优点

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

2、提高了类的复用。

3、增加了类的透明度。

4、灵活性好。

  • 缺点

1、过多地使用适配器,会让系统非常零乱,不易整体进行把握。比如,明明看到调用的是 A 接口,其实内部被适配成了 B 接口的实现,一个系统如果太多出现这种情况,无异于一场灾难。因此如果不是很有必要,可以不使用适配器,而是直接对系统进行重构。

2.由于 JAVA 至多继承一个类,所以至多只能适配一个适配者类,而且目标类必须是抽象类

模式实现

适配器模式有如下三个个角色:

  • 源(Adaptee):目标抽象类定义客户所需接口,可以是一个抽象类或接口,也可以

    是具体类,相当于typec线。
  • 适配器(Adapter):连接目标和源的中间对象,可以调用另一个接口,作为一个转换器。相当于耳机转typec转换器。
  • 目标(Target):即被适配的角色,相当于手机。

首先我们有一个手机类,有一个typec接口默认可以充电

  1. /**
  2. * @author codermy
  3. * @createTime 2020/7/25
  4. */
  5. public class Phone {
  6. public String throwTypec(){
  7. System.out.println("使用了typec接口");
  8. return "充电";
  9. }
  10. }

有一个耳机可以放音乐

  1. /**
  2. * @author codermy
  3. * @createTime 2020/7/25
  4. */
  5. public interface Headset {
  6. String music();
  7. }

现在买了一个转换器可以让有线耳机链接手机

  1. /**
  2. * @author codermy
  3. * @createTime 2020/7/25
  4. * 转换器
  5. */
  6. public class Converter implements Headset {
  7. private Phone phone;
  8. public Converter(Phone phone){
  9. this.phone = phone;
  10. }
  11. @Override
  12. public String music() {
  13. String s = phone.throwTypec();
  14. System.out.println(String.format("%s -------------- > %s",s,"听歌"));
  15. return "听歌";
  16. }
  17. }

用户使用转接器

  1. /**
  2. * @author codermy
  3. * @createTime 2020/7/25
  4. */
  5. public class Client {
  6. public static void main(String[] args) {
  7. Phone phone = new Phone();
  8. Headset headset = new Converter(phone);
  9. headset.music();
  10. }
  11. }

输出

  1. 使用了typec接口
  2. 充电 -------------- > 听歌

java23种设计模式——六、适配器模式的更多相关文章

  1. java23种设计模式之三: 适配器模式

    一.适配器模式  就是个通过一个中间件转化,可以将不匹配的两件事整合到一起,把不匹配变的匹配. 二.适配器分类 1.类适配器  2.对象适配器 三. 适配器的3种组成 1.类适配器组成 1.2个接口 ...

  2. java23种设计模式——八、组合模式

    目录 java23种设计模式-- 一.设计模式介绍 java23种设计模式-- 二.单例模式 java23种设计模式--三.工厂模式 java23种设计模式--四.原型模式 java23种设计模式-- ...

  3. java23种设计模式——七、桥接模式

    原文地址:https://www.cnblogs.com/chenssy/p/3317866.html 源码在我的github和gitee中获取 目录 java23种设计模式-- 一.设计模式介绍 j ...

  4. java23种设计模式—— 一、设计模式介绍

    Java23种设计模式全解析 目录 java23种设计模式-- 一.设计模式介绍 java23种设计模式-- 二.单例模式 java23种设计模式--三.工厂模式 java23种设计模式--四.原型模 ...

  5. java23种设计模式 (转)

    文章在:http://www.cnblogs.com/maowang1991/archive/2013/04/15/3023236.html 随着自己的开发经验增加以及自己做了很多的 大专栏  jav ...

  6. java23种设计模式——四、原型模式

    源码在我的github和gitee中获取 目录 java23种设计模式-- 一.设计模式介绍 java23种设计模式-- 二.单例模式 java23种设计模式--三.工厂模式 java23种设计模式- ...

  7. java23种设计模式——五、建造者模式

    源码在我的github和gitee中获取 目录 java23种设计模式-- 一.设计模式介绍 java23种设计模式-- 二.单例模式 java23种设计模式--三.工厂模式 java23种设计模式- ...

  8. java23种设计模式详解(转)

    设计模式(Design Patterns) ——可复用面向对象软件的基础 设计模式(Design pattern)是一套被反复使用.多数人知晓的.经过分类编目的.代码设计经验的总结.使用设计模式是为了 ...

  9. 学习java23种设计模式自我总结

    首先先做个广告,以前看过@maowang 这位大神转的Java开发中的23种设计模式详解(转) ,但是看了之后都忘差不多了, 所以,开个帖子边学习边自我总结(纯手敲).一直以来像这种需要长久的运动,真 ...

随机推荐

  1. PHP MySQL Delete删除数据库中的数据

    PHP MySQL Delete DELETE 语句用于从数据库表中删除行. 删除数据库中的数据 DELETE FROM 语句用于从数据库表中删除记录. 语法 DELETE FROM table_na ...

  2. PHP natsort() 函数

    ------------恢复内容开始------------ 实例 对数组进行排序: <?php$temp_files = array("temp15.txt"," ...

  3. PHP curl_strerror函数

    (PHP 5 >= 5.5.0) curl_strerror — 返回错误码的描述. 说明 string curl_strerror ( int $errornum ) 返回错误码的文本描述信息 ...

  4. PHP debug_print_backtrace() 函数

    定义和用法 debug_print_backtrace() 函数打印 backtrace. 该函数显示由 debug_print_backtrace() 函数代码生成的数据. 语法 debug_pri ...

  5. PHP hypot() 函数

    实例 计算不同的直角三角形的斜边长度: <?phpecho hypot(3,4) . "<br>";echo hypot(4,6) . "<br& ...

  6. PHP round() 函数

    实例 对浮点数进行四舍五入:高佣联盟 www.cgewang.com <?php echo(round(0.60) . "<br>"); echo(round(0 ...

  7. 集合框架-HashMap&HashSet&LinkedHshMap

    一.HashMap的底层实现 HashMap底层是基于数组和链表实现的.其中最重要的参数:容量和负载因子. 容量的默认大小事16,负载因子是0.75,当HashMap的size>16*0.75的 ...

  8. Java8的@sun.misc.Contended注解

    @sun.misc.Contended 介绍 @sun.misc.Contended 是 Java 8 新增的一个注解,对某字段加上该注解则表示该字段会单独占用一个缓存行(Cache Line). 这 ...

  9. Java并发学习(一):进程和线程

    好好学习,天天向上 本文已收录至我的Github仓库DayDayUP:github.com/RobodLee/DayDayUP,欢迎Star,更多文章请前往:目录导航 前言 俗话说得好"一人 ...

  10. 动态生成HTML元素-模拟在线考试功能

    前言 我们在项目开发过程中,经常会遇到页面html元素无法提前预设,而是通过某一些条件动态生成的情况,这里我们需要考虑如下几个因素: 1.需要动态创建的元素类型,比如TextBox, Radio, C ...