当前位置: 首页 > news >正文

适配器模式

概览

适配器模式是一种结构型设计模式,用于将一个类的接口转换为客户端所期望的另一种接口。通常情况下,这种转换是由一个适配器类完成的,适配器类包装了原始类,并实现了客户端所期望的接口。这种模式非常适用于在不修改现有代码的情况下,为已有的类添加新的功能或者将现有的类与其他类进行协同工作。

在Java中,适配器模式通常包括三个角色:

目标接口(Target):客户端所期望的接口,适配器类会实现这个接口,以便让客户端可以使用它。

原始类(Adaptee):需要被适配的类,即客户端不能直接使用的类。

适配器类(Adapter):包装了原始类,实现了目标接口,并将客户端的请求转换成对原始类的调用。

例子

下面是一个使用适配器模式将三插转换为二插的例子:

// 定义电器接口
public interface ElectricAppliance {public void powerOn();
}// 定义原始类,支持两个针脚的二插电源接口
public class TwoPinPlug implements ElectricAppliance {@Overridepublic void powerOn() {System.out.println("Using two-pin plug to power on the appliance.");}
}// 定义适配器类,支持三个针脚的三插电源接口
public class ThreePinAdapter implements ElectricAppliance {private ThreePinPlug threePinPlug;public ThreePinAdapter(ThreePinPlug threePinPlug) {this.threePinPlug = threePinPlug;}@Overridepublic void powerOn() {System.out.println("Using three-pin plug adapter to power on the appliance.");threePinPlug.powerOn();}
}// 定义原始类,支持三个针脚的三插电源接口
public class ThreePinPlug {public void powerOn() {System.out.println("Using three-pin plug to power on the appliance.");}
}// 客户端程序,使用电器接口来操作电器设备
public class Main {public static void main(String[] args) {ElectricAppliance appliance;// 使用两个针脚的二插电源接口直接操作电器appliance = new TwoPinPlug();appliance.powerOn();// 使用三个针脚的三插电源接口时,需要使用适配器将其转换成二插电源接口appliance = new ThreePinAdapter(new ThreePinPlug());appliance.powerOn();}
}

在上面的例子中,我们定义了一个电器接口ElectricAppliance,其中有一个powerOn()方法用于打开电器设备。我们还定义了一个支持两个针脚的二插电源接口TwoPinPlug,以及一个支持三个针脚的三插电源接口ThreePinPlug。由于两种电源接口不兼容,我们需要使用适配器模式将三插电源接口转换成二插电源接口。适配器类ThreePinAdapter实现了ElectricAppliance接口,其中持有一个ThreePinPlug对象,并将其转换成ElectricAppliance接口可以使用的形式。在客户端程序中,我们可以直接使用TwoPinPlug对象来操作电器设备,也可以使用适配器将ThreePinPlug对象转换成ElectricAppliance接口可以使用的形式。

类图

在这里插入图片描述

适配器模式类图

适配器模式涉及三个角色:

Target(目标抽象类或接口):定义客户端需要的特定接口或抽象类,即客户端希望调用的方法集合。
Adapter(适配器类):将原始接口转换成目标接口,它实现了目标接口,并持有原始接口的引用,负责将客户端的请求转换成对原始接口的调用。
Adaptee(原始类):定义了一个已经存在的接口,但这个接口并不符合客户端需要的接口,需要进行适配。Adaptee类是被Adapter适配的类,它是已经存在的、运行良好的类或对象,通过适配器模式可以使它与新系统环境协同工作。
在适配器模式中,客户端通过调用Target接口中的方法来访问适配器,适配器再调用Adaptee中的方法来完成客户端的请求,从而实现了客户端与Adaptee之间的适配。

需要注意的是,在适配器模式中,Target接口可以是一个抽象类或一个接口,Adapter类是一个具体类,而Adaptee类既可以是具体类,也可以是抽象类。
在这里插入图片描述

http://www.lryc.cn/news/27782.html

相关文章:

  • 00后跨专业学软件测试,斩获8.5K高薪逆袭职场
  • 数据结构和算法学习
  • 剑指 Offer II 012. 左右两边子数组的和相等
  • Java货物摆放
  • 计算机求解满足三角形各边数字之和相等的数字填充
  • python魔术方法
  • 从0开始学python -48
  • 当面试官问我前端可以做的性能优化有哪些
  • 一文读懂Java/O流的使用方法和技巧
  • AI for Science系列(二):国内首个基于AI框架的CFD工具组件!赛桨v1.0 Beta API介绍以及典型案例分享!
  • SpringCloud简单介绍
  • 《uniapp基础知识》学习笔记Day38-(Period2)全局文件一些常用的配置
  • APICloud 弹动与滚轴冲突的解决模拟
  • Spring Cloud(微服务)学习篇(四)
  • 【Java Pro】001-Java基础:面向对象
  • ElasticSearch从0到1——基础知识
  • 【面试系列】equals和==的区别
  • 存在重复元素模块-三道题
  • 3种方法删除7-Zip压缩包的密码
  • Codeforces Round 855 (Div. 3)(A~F)
  • 【SpringCloud】SpringCloud详解之Feign实战
  • tuts4you上lena‘s40个crackme(1)
  • 研讨会回顾 | Perforce版本控制工具Helix Core入华十年,携手龙智赋能企业大规模研发
  • C++ vscode 开发环境搭建
  • ANR系列(二)——ANR监听方案之SyncBarrier
  • 【完美解决】应用程序无法正常启动(0xc000007b)请单击“确定”关闭应用程序
  • .NET基础加强第二课--静态成员,静态类
  • 【UML+OOPC嵌入式C语言开发】使用C语言实现一个面向对象语言才能够实现的类
  • 软件测试自动化Java篇【Selenium+Junit 5】
  • Clip:学习笔记