本文首发于cdream的个人博客,点击获得更好的阅读体验!

欢迎转载,转载请注明出处。

本文简述适配器模式,考虑到java中没有多继承就只写了对象适配器模式,然后例子是怎么用转接口把3.5mm耳机插在小米8上面。

一、概念

适配器模式(英语:adapter pattern)有时候也称包装样式或者包装(wrapper)。将一个类的接口转接成用户所期待的。一个适配器使得因接口不兼容而不能在一起工作的类能在一起工作,做法是将类自己的接口包裹在一个已存在的类中。

适配器模式允许一个已存在的类的接口被用作另一个接口。通常可以在不需要修改源代码的情况下使用已存在的类。

其实在生活中,适配器随处看见,例如下图,一个type-c转耳机口的适配器。接下来让我看看适配器模式的结构,并用java代码来实现一个type-c接口的手机与3.5mm的耳机通过适配器连接。

适配器模式主要解决两个问题
1.转换当前接口为客户端需要的接口
2.通过适配器使用没有我们需要的接口的类

描述看似相同,实际上出发点不同~嘿嘿,意会意会

二、结构

适配器模式有两种,一种是类适配器,不过需要支持多继承的语言才能实现,本文主要讲解单继承也可以实现的对象适配器。下图是对象适配器模式的类图,Client需要一个实现Target接口的类来完成工作,而当前我们提供的只有Adaptee类,这时该怎么办呢?恩,我们就造一个适配器(adapter)来完成这个需求。

涉及到的主要角色:

Target:目标接口,也就是我们期待得到的接口。

Adaptee:当前拥有的接口,需要适配,已满足客户端的要求。

Adapter:适配器类,适配器模式的核心,就是将Adaptee转换成需要的接口的具体类。

三、Type-C转3.5mm耳机孔适配器

这个是小米8手机类,只提供插TypeC耳机的接口

public class Mi8{
private TypeCEraPhones eraPhones;
//打电话功能
public void call() {
System.out.println("打电话");
}
//播放音乐,有耳机就用耳机,没耳机就外放
public void playMusic() {
if (eraPhones != null){
eraPhones.play();
}else{
System.out.println("外放");
} }
// 插个TypeC接口的耳机
public void setEraPhones(TypeCEraPhones eraPhones) {
this.eraPhones = eraPhones;
}
}

这个是TypeC接口的耳机接口,听说用这个接口的耳机都好好贵呢~~

public interface TypeCEraPhones {
void play();
}

这个是我们以前剩下的能听个响的3.5mm接口的耳机

public class Mi35MMEraPhones {
public void play(){
System.out.println("使用3.5mm孔的小米耳机播放声音");
}
}

怎么办呢,是花大钱买个新的耳机(想想,如果真是个复杂的对象,重新实现功能是不是很头大),还是对当前这个3.5mm的耳机爆改,可是我还有个需要使用3.5mm的mp3 ,

设计模式——适配器模式(type-c转3.5mm耳机口)的更多相关文章

  1. 20. 星际争霸之php设计模式--适配器模式

    题记==============================================================================本php设计模式专辑来源于博客(jymo ...

  2. Java设计模式——适配器模式

    JAVA 设计模式 适配器模式 用途 适配器模式 (Adapter) 将一个类的接口转换成客户希望的另外一个接口. Adapter模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作. 适配器 ...

  3. linkin大话设计模式--适配器模式

    linkin大话设计模式--适配器模式 大家知道,在java中只允许单继承,但是在实际问题中往往都需要多继承,java引入了接口这一概念.(一个类可以实现多个接口) 由于接口中都是抽象方法,那么我们在 ...

  4. 手机遥控器,3.5mm耳机接口红外遥控改造解析

    很多家电都用红外遥控,如电视机.机顶盒.空调.电风扇等.越来越多的遥控器反而给我们带来了更多的问题,有时找不到遥控器放哪儿了,或者混淆了都是麻烦,事实上对手机进行简单的改造,可以自制一个万能红外遥控器 ...

  5. php设计模式适配器模式

    php设计模式适配器模式 简介 适配器模式(有时候也称包装样式或者包装)将一个类的接口适配成用户所期待的.一个适配允许通常因为接口不兼容而不能在一起工作的类工作在一起. 其实就是通过一个转换类,这个转 ...

  6. 【设计模式】Java设计模式 - 适配器模式

    [设计模式]Java设计模式 - 适配器模式 不断学习才是王道 继续踏上学习之路,学之分享笔记 总有一天我也能像各位大佬一样 原创作品,更多关注我CSDN: 一个有梦有戏的人 准备将博客园.CSDN一 ...

  7. 结合JDK源码看设计模式——适配器模式

    定义: 将一个类的接口转换成客户期望的另外一个接口(重点理解适配的这两个字),使得接口不兼容的类可以一起工作适用场景: 已经存在的类,它的方法和需求不匹配的时候 在软件维护阶段考虑的设计模式 详解 首 ...

  8. 设计模式-适配器模式(Go语言描写叙述)

    在上一篇博客设计模式-策略模式(Go语言描写叙述)中我们用最简单的代码用go语言描写叙述了设计模式中的策略模式,用最简单的实例来描写叙述相信能够让刚開始学习的人能够非常轻松的掌握各种设计模式.继上篇博 ...

  9. 浅谈Python设计模式 - 适配器模式

    声明:本系列文章主要参考<精通Python设计模式>一书,并且参考一些资料,结合自己的一些看法来总结而来. 从本篇便开始介绍结构型设计模式,而适配器设计模式便是该类设计模式的一种,那么什么 ...

随机推荐

  1. 2019/4/23 todolist

    近期的任务单子大概是这样吧 bjoi2019改完,写题解 hnoi2019改一些,写题解 找3道网络流写写 写一场agc,写题解 找2道简单计算几何写写

  2. IDFA

    https://zhuanlan.zhihu.com/p/24161646 IDFA全称是identifier for advertisers,在了解IDFA之前,我们需要了解另一个概念,叫UDID. ...

  3. [学习笔记]状压dp

    状压 \(dp\) 1.[SDOI2009]Bill的挑战 \(f[i][j]\) 表示匹配到字符串的第 \(i\) 位状态为 \(j\) 的方案数 那么方程就很明显了,每次枚举第 \(i\) 位的字 ...

  4. win10安装Ubuntu双系统

    1.软碟通做启动盘,不要用easyBCD,比较麻烦 2.windows10中取消选择"启用快速启动(推荐)" 3.压缩出空白卷 4.重启时按F12 5.在bios中将boot pr ...

  5. 牛客第二场 C.message(计算几何+二分)

    题目传送:https://www.nowcoder.com/acm/contest/140/C 题意:有n个云层,每个云层可以表示为y=ax+b.每个飞机的航线可以表示为时间x时,坐标为(x,cx+d ...

  6. springboot常用注解

    @SpringBootApplication:包含了@ComponentScan.@Configuration和@EnableAutoConfiguration注解.其中@ComponentScan让 ...

  7. ICMP与ping:投石问路的侦察兵

    1. ICMP 协议 ICMP全称Internet Control Message Protocol,就是互联网控制报文协议.ping命令就是基于它工作的. ICMP 报文是封装在 IP 包 里面的. ...

  8. flask框架--cookie,session

    今天我又给大家分享一下怎么用flask框架来实现像淘宝购物车一样存储数据,并且把存储的数据删除,这个方法可以用两个方法都可以做成,一个是cookie,另一个是session. session是依赖于c ...

  9. [EXP]WordPress Core 5.0 - Remote Code Execution

    var wpnonce = ''; var ajaxnonce = ''; var wp_attached_file = ''; var imgurl = ''; var postajaxdata = ...

  10. POJ 2410

    #include <iostream> #include <cmath> #include <string> using namespace std; int gi ...