Table of Contents generated with DocToc

  • 一、生活中的适配器
  • 二、程序中的适配器模式
    • 2.1 基本介绍
    • 2.2 工作原理
  • 三、类适配器模式
    • 3.1 应用实例
    • 3.2 类图
    • 3.3 java实现
    • 3.4 总结
  • 四、对象适配器
  • 五、接口适配器模式
    • 5.1 类图
    • 5.2 java实现

一、生活中的适配器

每个国家使用的插座标准不同,比如泰国用的是两孔的(欧标),中国用的是三孔的。

我们到泰国旅游时,如果只带了三孔插头,则可以买个多功能转换插头【适配器】,这样就可以使用泰国的两孔插座了。


二、程序中的适配器模式

2.1 基本介绍

  1. 适配器模式(Adapter Pattern)将某个类的接口转换成客户端期望的另一个接口表示,主的目的是兼容性,让原本因接口不匹配不能一起工作的两个类可以协同工作。其别名为包装器(Wrapper)
  2. 适配器模式属于结构型模式【并没有产生新的对象】
  3. 主要分为三类:类适配器模式、对象适配器模式、接口适配器模式

2.2 工作原理

  1. 适配器模式:将一个类的接口转换成另一种接口。让原本接口不兼容的类可以兼容
  2. 从用户的角度看不到被适配者,是解耦的
  3. 用户调用适配器转化出来的目标接口方法,适配器再调用被适配者的相关接口方法
  4. 用户收到反馈结果,感觉只是和目标接口交互,如图


三、类适配器模式

基本介绍:Adapter类,通过继承src类, 实现dst类接口,完成src->dst的适配。

3.1 应用实例

以生活中充电器的例子来讲解适配器,充电器本身相当于Adapter, 220V交流电
相当于src (即被适配者),我们的dst(即 目标)是5V直流电

3.2 类图

我们手机需要5v的直流电,则调用5v直流电的接口,然后使用适配器VoltageAdapter将220v的电压转为5v即可

3.3 java实现

  1. 首先实现220v电压
//被适配类Source
public class Voltage220v {public int output220v(){int src = 220;System.out.println("输出"+src+"伏特");return src;}
}
  1. 然后创建5v直流电接口
//适配接口
public interface Voltage5v {int output5v();
}
  1. 创建适配器类,继承voltage220v,实现voltage5v
//适配器
public class VoltageAdapter extends Voltage220v implements Voltage5v{@Overridepublic int output5v() {int source = output220v();int target = source / 44;return target;}
}
  1. 手机类
public class Phone{public void chargiing(Voltage5v voltage5v){if(voltage5v.output5v()==5){System.out.println("电压为5v,可以充电");}else{System.out.println("电压不合适,不可以充电");}}
}
  1. 调用:
public class Client {public static void main(String[] args) {System.out.println("===========类适配器模式===========");Phone phone = new Phone();//VoltageAdapter相当于充电器phone.chargiing(new VoltageAdapter());}
}

输出为:

=类适配器模式=
输出220伏特
电压为5v,可以充电

3.4 总结

类适配器模式注意事项和细节

  • Java是单继承机制,所以类适配器需要继承src类这一 点算是一个缺点,因为这要
    求dst必须是接口,有一定局限性;
  • src类 的方法在Adapter中都会暴露出来,也增加了使用的成本。
  • 由于其继承了src类,所以它可以根据需求重写src类的方法, 使得Adapter的灵
    活性增强了。

四、对象适配器

对象适配器模式介绍

  1. 基本思路和类的适配器模式相同,只是将Adapter类作修改,不是继承src类, 而
    是持有src类的实例,以解决兼容性的问题。即:持有src类,实现dst类接口,
    完成src->dst的适配
  2. 根据“合成复用原则”,在系统中尽量使用关联关系来替代继承关系。
  3. 对象适配器模式是适配器模式常用的一种

只需要改动适配器类VoltageAdapter,将继承改为依赖

//适配器
public class VoltageAdapter implements Voltage5v{private Voltage220v sourceV;public VoltageAdapter(Voltage220v sourceV) {this.sourceV = sourceV;}@Overridepublic int output5v() {int target = 0;if(null != sourceV){int source = sourceV.output220v();target = source / 44;}return target;}
}

然后改动Client

public class Client {public static void main(String[] args) {System.out.println("===========类适配器模式===========");Phone phone = new Phone();//VoltageAdapter相当于充电器phone.chargiing(new VoltageAdapter(new Voltage220v()));}
}

五、接口适配器模式

基本介绍:

  1. 一些书籍称为:适配器模式(Default Adapter Pattern)或缺省适配器模式。
  2. 不需要全部实现接口提供的方法时,可先设计一个抽象类实现接口,并为该接
    口中每个方法提供一一个默认实现(空方法),那么该抽象类的子类可有选择地覆
    盖父类的某些方法来实现需求
  3. 适用于一个接口不想使用其所有的方法的情况。

5.1 类图

我们不需要实现Interface中所有方法,只需要用匿名内部类的方式实现AbstractAdapter中的部分方法即可

5.2 java实现

  1. 基本接口
public interface BaseInterface {void operation1();void operation2();void operation3();
}
  1. 适配器(空实现)
public abstract class AbstractAdapter implements BaseInterface{public void operation1() {}public void operation2() {}public void operation3() {}
}
  1. 使用适配器
public class Client {public static void main(String[] args) {//匿名内部类重写部分方法AbstractAdapter abstractAdapter = new AbstractAdapter(){@Overridepublic void operation1() {System.out.println("重写方法一");}};abstractAdapter.operation1();}
}

尚硅谷设计模式笔记-适配器模式相关推荐

  1. 尚硅谷设计模式笔记-装饰者模式

    文章目录 一.需求 二.装饰者方法 三.装饰者模式的JDK应用 笔记来源: 尚硅谷 一.需求 星巴克咖啡订单项目(咖啡馆) : 咖啡种类/单品咖啡: Espresso(意大利浓咖啡). ShortBl ...

  2. Java 基础 第3阶段:高级应用——尚硅谷学习笔记(含面试题) 2023年

    Java 基础 第 3 阶段:高级应用--尚硅谷学习笔记(含面试题) 2023 年 Java 基础 第 3 阶段:高级应用--尚硅谷学习笔记(含面试题) 2023 年 第 9 章 异常处理 9.1 异 ...

  3. 尚硅谷 jQuery 笔记(张晓飞 2018)

    title: 尚硅谷 jQuery 笔记 date: 2020-11-24 21:40:50 toc: true description: jQuery是JS的一个封装的库函数集,用于DOM的CRUD ...

  4. 尚硅谷_CSS3 笔记

    目录 什么是CSS3 选择器 基本选择器及其扩展 属性选择器 伪类与伪元素选择器 css声明的优先级 自定义字体&字体图标 复习1 新的UI方案 文本新增样式 opacity RGBA 文字阴 ...

  5. B站MySQL(尚硅谷)学习笔记

    B站MySQL基础(尚硅谷)学习笔记 最近在学习数据库技术,并且把视频中的知识点进行了汇总,字数较多,仅供参考. 会持续更新 欢迎读者提出问题与错误,一起交流~ 视频前几集所讲述的基本知识: DB:数 ...

  6. 尚硅谷JavaSE笔记(四)

    系列文章目录 尚硅谷JavaSE笔记(一) 尚硅谷JavaSE笔记(二) 尚硅谷JavaSE笔记(三) 尚硅谷JavaSE笔记(四) 文章目录 十六.File 类与 IO 流 1.java.io.Fi ...

  7. 尚硅谷设计模式-观察者模式

    文章目录 一.需求 二.解决方案 2.1 普通方案 2.2 观察者模式 笔记来源: 尚硅谷 一.需求 天气预报项目需求,具体要求如下: 气象站可以将每天测量到的温度,湿度,气压等等以公告的形式发布出去 ...

  8. 尚硅谷vue笔记 详细讲解版(尚硅谷 天禹老师)

    视频:[尚硅谷Vue2.0+Vue3.0全套教程丨vuejs从入门到精通]https://www.bilibili.com/video/BV1Zy4y1K7SH?vd_source=10e3dfac9 ...

  9. 尚硅谷springboot笔记_dubbo笔记(一、基础知识)

    文章内容参考尚硅谷dubbo文档,侵删. 官方地址:https://shimo.im/docs/T9CRVXdRD9CdjcGw/ 一.SOA和RPC介绍 1.SOA 随着互联网的发展,应用规模不断扩 ...

最新文章

  1. 工艺路线和工序有差别吗_ERP-工序与工艺路线
  2. python基础常用语句-Python语言的一些基本常用语句
  3. 没串口怎么操作核心板的Linux?ADB(以点灯为例)
  4. 编程工作怎么样手工问号
  5. ISCC2018(misc)
  6. 同时装有py2 和3,运行scrapy如何区分
  7. 现代软件工程 阅读笔记
  8. 1月4日 每次安装都有新问题
  9. 无线传感器网络技术原理及应用 知识点
  10. 《统计学习方法》python代码资料
  11. android qq轻聊版多个,Android QQ轻聊版怎样样
  12. PTA题目:顺序表基本操作
  13. 一个百万富翁遇到一个陌生人,陌生人找他谈一个换钱的计划,该计划如下:我每天给你十万元,而你第一天只需给我一分钱;第二天我仍给你十万元,你给我两分钱;第三天我仍给你十万元,你给我四分钱;....,你每天
  14. 3月16日—3月20日四年级课程表
  15. 皖舒医疗告诉你医疗级制氧机具备哪些特性
  16. 独家 | OpenAI的DALL·E模型使人类更接近通用人工智能(附链接)
  17. IPTV系统架构的分析与研究
  18. Office_2019企业版安装教程
  19. 数字图像处理第九章形态学处理
  20. python-tk身份证读取页面编写

热门文章

  1. 0基础学python有多难-对于几乎是零基础的人,直接学 Python 编程合适吗?
  2. python教程2019全套-如何领取Python2019 全套视频教程
  3. python零基础能学吗-Python真的零基础可以学会吗?
  4. 21天学通python-21天学通Python(第2版)
  5. 一张图学会python应用到excel-Python应用之------Excel操作
  6. micropython和python区别-选择C/C++还是选择MicroPython来开发?(第0章-第三节)
  7. 百度远场语音识别套件-开箱评测
  8. 苹果ppt_“苹果美感中国学不来?”阿里、腾讯的设计师让你感受中国智造
  9. 【二分法】计蒜客:切割钢管
  10. 图解FFMPEG打开媒体的函数avformat_open_input