@

源码在我的githubgitee中获取

介绍

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

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

应用场景

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

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

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

优缺点

  • 优点

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

2、提高了类的复用。

3、增加了类的透明度。

4、灵活性好。

  • 缺点

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

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

模式实现

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

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

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

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

/**
* @author codermy
* @createTime 2020/7/25
*/
public class Phone {
public String throwTypec(){
System.out.println("使用了typec接口");
return "充电";
}
}

有一个耳机可以放音乐

/**
* @author codermy
* @createTime 2020/7/25
*/
public interface Headset {
String music();
}

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

/**
* @author codermy
* @createTime 2020/7/25
* 转换器
*/
public class Converter implements Headset { private Phone phone; public Converter(Phone phone){
this.phone = phone;
} @Override
public String music() {
String s = phone.throwTypec();
System.out.println(String.format("%s -------------- > %s",s,"听歌"));
return "听歌";
}
}

用户使用转接器

/**
* @author codermy
* @createTime 2020/7/25
*/
public class Client {
public static void main(String[] args) {
Phone phone = new Phone();
Headset headset = new Converter(phone);
headset.music();
}
}

输出

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

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 timezone_abbreviations_list() 函数

    ------------恢复内容开始------------ 实例 输出 "act" 时区的夏令时.偏移量和时区名称: <?php$tzlist=timezone_abbre ...

  2. HTML <html> 标签

    HTML <html> 标签 实例 简单的 HTML5 文档: <!DOCTYPE html><html>高佣联盟 www.cgewang.com<head& ...

  3. BSOJ 5553 wangyurzee的树 prufer序列 容斥

    BSOJ我也不知道在哪. 容易想到容斥. 考虑不合法的方案 想到强制某个点的度数为限制即可. 这样就变成了了总方案-一个不合法+两个不合法-3个......的模型了. 坑点 当强制两个相同的点时 方案 ...

  4. linux的PS进程和作业管理(进程调度,杀死进程和进程故障-僵尸进程-内存泄漏)

     Ps进程和作业管理 1.查看进程ps 1.格式 ps   ---查看当前终端下的进程 3种格式: SYSV格式   带 - 符号 BSD格式  不带 - 符号 GNU格式   长选项 2.ps -a ...

  5. python3 openssl问题(贼有用)

    目录 一.问题描述 二.排查过程 三.总结 四.写在最后 一.问题描述 在python3 执行任何的request请求时,都会报以下的错误,纵观全网,以下基本尝试过了,对于我这个是无效的,后来不知道怎 ...

  6. 当asp.net core偶遇docker一(模型验证和Rabbitmq 三)

    继续上一篇 上一篇,从core方式实现了一个Rabbitmq发送队列消息的接口,我们现在需要在模型验证里面加入验证失败就发送消息的部分 [AttributeUsage(AttributeTargets ...

  7. Python实现图片滑动式验证识别

    1 abstract 很多人学习python,不知道从何学起.很多人学习python,掌握了基本语法过后,不知道在哪里寻找案例上手.很多已经做案例的人,却不知道如何去学习更加高深的知识.那么针对这三类 ...

  8. MySQL--->数据库的简介和安装

    1.什么是MySQL: MySQL是一个小型关系型数据库管理系统,开发者伟瑞典MySQL AB公司. 目前MySQL被广泛的应用在Internet上的中小型网站中.由于体积小,速度快,总体拥有成本低, ...

  9. 打开终端自动source .bashrc文件

    vim ~/.bash_profile在文件内部输入 if test -f .bashrc ; then source .bashrc fi 就再也不用手动source了

  10. C#LeetCode刷题之#521-最长特殊序列 Ⅰ​​​​​​​(Longest Uncommon Subsequence I)

    问题 该文章的最新版本已迁移至个人博客[比特飞],单击链接 https://www.byteflying.com/archives/3949 访问. 给定两个字符串,你需要从这两个字符串中找出最长的特 ...