适配器模式:

1 初步认识

适配器模式的定义:

将一个类的接口转成客户期望的另外一个接口。适配器模式使得原本由于接口不匹配而不能一起工作的那些类可以一起工作。

通俗的讲法:用电器来打个比喻:有一个电器的插头是三脚的,而现有的插座是两孔的,要使插头插上插座,我们需要一个插头转换器,这个转换器即是适配器。

适配器模式组成结构

  • 目标接口(Target):客户所期待的接口。目标可以是具体的或抽象的类,也可以是接口。
  • 适配者(Adaptee):需要适配的类或适配者类。
  • 适配器(Adapter):通过包装一个需要适配的对象,把原接口转换成目标接口。

适配器模式包括3种形式:类适配器模式、对象适配器模式、接口适配器模式(或又称作缺省适配器模式)。

适配器模式 UML 图解:

“类”适配器“:

“对象”适配器


看起来“类”适配器和“对象”适配器很类似,唯一的差别就是 Adapter 继承了 Target 与 Adaptee。所以“类”适配器必须要使用多重继承才能实

类适配器模式

代码实现:

​ 要被是适配的类:Adaptee

package com.company.adapter;/*** @author XIANS*/
//源:要被适配的类  将这个比作网线
public class Adaptee {//需要被适配的内容public void requst(){System.out.println("连接网络,上网");}}

抽象类的实现:NetToUsb

package com.company.adapter;/*** @author XIANS*/
// 接口抽象类的实现
public interface NetToUsb {/***   作用处理请求*   将网线接入USB接口*/void handleRequest();}

适配器:Adapter

package com.company.adapter;/*** @author XIANS*/
//真正的适配器  需要连接USB, 连接网线
public class Adapter extends Adaptee     implements NetToUsb{@Overridepublic void handleRequest() {//调用父类的方法super.requst();}
}

客户端类:computer

package com.company.adapter;import java.security.cert.X509Certificate;/*** @author XIANS*/// 这里比作客户端类 ,电脑
public class Computer {//我们的电脑要连接转接器才可以上网public void net(NetToUsb adapter){//具体的内容实现adapter.handleRequest();}

测试:

public static void main(String[] args) {//电脑Computer computer = new Computer();//网线Adaptee adaptee = new Adaptee();//适配器Adapter adapter = new Adapter();computer.net(adapter);}
对象适配器:

编写新的适配器类:Adapter2

package com.company.adapter;import com.sun.xml.internal.ws.wsdl.writer.document.http.Address;/*** @author XIANS*/
//真正的适配器  需要连接USB, 连接网线
public class Adapter2  implements NetToUsb{//以组合的方式实现适配器的功能private Adaptee adaptee;public Adapter2(Adaptee adaptee) {this.adaptee = adaptee;}@Overridepublic void handleRequest() {//实现Adaptee的方法adaptee.requst();}
}

按照之前的方法测试即可

public static void main(String[] args) {//电脑Computer computer = new Computer();//网线Adaptee adaptee = new Adaptee();//适配器Adapter2 adapter = new Adapter2(adaptee);computer.net(adapter);}
对象适配器的优点:
  1. ​ 一个对象适配器可以把多个不同的适配者适配到同一个目标
  2. 可以适配一个适配者的子类,由于适配器和适配者之间是关联的,根据“里氏代换原则”,适配者的子类也可以通过该适配器进行适配。
类适配器的缺点:
  1. ​ 对于Java、C#等不支持多重类继承的语言,一次最多只能是配一个适配者类,不能同时适配多个适配者

  2. 对于Java、C#等语言中,类适配器模式中的目标抽象类只能为接口不能为类,其使用洋浦有一定的局限性

    适配器模式应用场景
    • 系统需要使用现有的类,而这些类的接口不符合系统的需要。
    • 想要建立一个可以重复使用的类,用于与一些彼此之间没有太大关联的一些类,包括一些可能在将来引进的类一起工作。
    • 需要一个统一的输出接口,而输入端的类型不可预知。

2020 java设计模式之适配器模式相关推荐

  1. Java设计模式之适配器模式(属于结构型模式)

    Java设计模式之适配器模式(结构型模式) 定义:将一个类的接口转换成客户希望的另外一个接口.Adaptor模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作. 模式中的角色: 目标接口(T ...

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

    一.了解适配器模式 1.1 什么是适配器模式 适配器模式将一个类的接口,转换成客户期望的另一个接口.适配器让原来接口不兼容的类可以合作无间.适配器模式有两种:"对象"适配器和&qu ...

  3. Java 设计模式(适配器模式与外观模式)

    适配器模式 包装某些对象,让它们的接口看起来不像自己而像是别的东西. 将一个类的接口转换成客户期望的另一个接口.适配器让原本接口不兼容的类可以合作无间. 比如现有一个软件系统,有一些接口,但是与所需的 ...

  4. ​JAVA设计模式(九)——适配器模式

    下图为所有设计模式,带标记为重点掌握以及工作中常用到的:   适配器模式属于结构型模式之一,顾名思义,肯定会存在一个适配器的类去进行适配.比如我们以前的笔记本电脑如果要读取我们手机的内存卡,直接读取是 ...

  5. Java设计模式之适配器模式

    适配器模式使那些原本由于接口不兼容而不能一起工作的类可以一起工作. 这里我们举一个例子说明适配器设计模式. 上面的类图中,我定义了两个接口,一个BigPlants接口一个SmartPlants接口,他 ...

  6. java设计模式 之适配器模式

    <JAVA与模式>一书中开头是这样描述适配器(Adapter)模式的: 适配器模式把一个类的接口变换成客户端所期待的另一种接口,从而使原本因接口不匹配而无法在一起工作的两个类能够在一起工作 ...

  7. java设计模式adapter,java设计模式-适配器模式(Adapter)

    定义 适配器模式把一个类的接口变换成客户端所期待的另一种接口,从而使原本因接口不匹配而无法在一起工作的两个类能够在一起工作. 适配器模式的用途 用电器做例子,笔记本电脑的插头一般都是三相的,即除了阳极 ...

  8. (设计模式六)java设计模式之适配器模式

    适配器模式将一个类的接口适配成用户所期待的.一个适配允许通常因为接口不兼容而不能在一起工作的类工作在一起,做法是将类自己的接口包裹在一个已存在的类中. 一.解决问题: 即Adapter模式使得原本由于 ...

  9. Java设计模式之适配器模式在jdk中的应用

最新文章

  1. oracle中SQL语句ge的用法,Oracle中SQL语句的几种用法
  2. ios html cookies,iOS-WKWebView携带cookie发送http请求,cookie失效
  3. 什么样的技术人员更容易接到软件开发项目?(论干私活儿)
  4. 常用Git命令清单。
  5. 高级数据库,建库,建表,建约束
  6. 人工智能发展趋势——深度AI科普调研团队
  7. Oracle Assets Additions API--Sample Script(Invoices)
  8. qt中c语言运行中文字体乱码,QString 与中文问题/Qt界面中文字体及大小设置
  9. 稳定好用的短连接生成平台,支持API批量生成
  10. C++大写字母转小写字母
  11. word2013怎么去掉所有文字下面的波浪线
  12. Google 开源项目风格指南--C++ 风格指南
  13. 基于微信小程序房屋出租民宿预定app设计
  14. 文件查重FindDupFile
  15. 【jiasuba】分享:键盘失灵烦恼多 教你轻松禁用原键盘
  16. 如何使用left join,以及left join的分析
  17. 国产充电宝有哪些,国产充电宝哪个牌子的质量好?
  18. Mapper 重命名问题
  19. “美亚杯”第二届中国电子数据取证大赛答案解析(团体赛)
  20. 为什么现在我更推荐 pnpm 而不是 npm/yarn?

热门文章

  1. 有关time的一系列python使用方法
  2. 操作系统——MFC实现进程创建和通信4
  3. 龙年的喜洋洋真的很烂
  4. Python爬虫爬取Twitter视频、文章、图片
  5. 多项式A除以B(模拟多项式除法)
  6. WiFi工作原理简述
  7. AStar(A*)算法
  8. 某大厂程序员炫耀:来新加坡后,每天最多工作五六个小时,家庭年收入150万人民币,已躺平!...
  9. Python——turtle(海龟绘图)
  10. fatal: unable to access 或者 fatal: could not read from remote repository