适配器模式(Adapter Pattern)

devtools/2024/10/18 9:25:45/

适配器模式(Adapter Pattern)

定义

它的功能是将一个类的接口变成客户端锁期望的另一种接口,从而使原本因接口不匹配而导致无法在一起工作的两个类能够一起工作。

属于结构型设计模式

适用场景

已经存在的类,它的方法和需求不匹配(方法结果相同或相似)的情况。
适配器模式不是软件设计阶段考虑的设计模式。它是随着软件维护,由于不同产品、不同厂家造成功能类似而接口不相同情况下的解决方案。类似于后期的补丁方案。

适配器主要是为了解决兼容问题。

类适配器用的是继承;对象适配器用的是组合。

标准示例

一 类适配器

在这里插入图片描述
类适配器,有三个角色:
目标接口(Target)、适配者(Adapter)、类适配器(ClassAdapter
具体代码如下:

public interface Target{void request();
}
public class Adapter{public void specificRequest(){System.out.println("适配器中的业务代码");}
}
public class ClassAdapter extends Adapter implements Target{public void request(){super.specificRequest();}
}
public class ClientTest{public static void main(String[] args){Target target = new ClassAdapter();target.request();}
}

执行结果输出为:

适配器中的业务代码

二 对象适配器

在这里插入图片描述
对象适配器,也有三个角色:
目标接口(Target)、适配者(Adapter)、类适配器(ObjectAdapter
前两者与类适配器中相同。
实际上,类适配器与对象适配器的区别,主要在于:
前者是通过继承体系获取父类Adapter 中的方法;
后者是通过构造方法传入Adapter对象实例,调用Adapter中的方法
相同的类不再重复,下面给出ObjectAdapter 和 ClientTest

public class ObjectAdapter implements Target{private Adapter adapter;public ObjectAdapter(Adapter adapter){this.adapter = adapter;}public void request() {adapter.specificRequest();}	
}
public class ClientTest{public static void main(String[] args){Target target = new ObjectAdapter(new Adapter());target.request();}
}

输出结果为:

适配器中的业务代码

ClassAdapter类,通过继承 Adapter类,实现 Target 接口,完成 Adapter -> Target 的适配


接下来举个常见的例子。
日常生活中,常见的是220V的交流电,而我们电子设备上不需要这么大的电压,所以使用适配器将其转换为5V的电压。
我们以类适配器为例:
被适配的类:Voltage220V
适配接口:IVoltage5V
适配器类:VoltageAdapter
用电器:Phone

public class Voltage220V{public int out220V(){System.out.println("电压220V");return 220;}
}public interface IVoltage5V{int out5V();	
}public class VoltageAdapter extends Voltage220V implements IVoltage5V{public int out5V(){int srcOut = super.out220V();int targetOut = srcOut / 44;return targetOut;}
}public class Phone(){public void charge(IVoltage5V voltage){int out = voltage.out5V();if(out == 5){System.out.println("电压是5v,可以充电");	}else{			System.out.println("电压不是5v,无法充电");	}}
}public class ClientTest{public static void main(String[] args){IVoltage5V voltage = new VoltageAdapter();Phone phone = new Phone();phone.charge(voltage);}
}

执行后,输出结果为:

电压220V
电压是5v,可以充电

以上就是适配器模式的全部内容,感谢阅读。


http://www.ppmy.cn/devtools/56437.html

相关文章

AI 与 Python 实战干货:基于深度学习的图像识别

《AI 与 Python 实战干货:基于深度学习的图像识别》 今天咱不啰嗦,直接上干货! 在 AI 领域,特别是图像识别方面,Python 简直是一把利器。咱就以手写数字识别为例,来看看怎么用 Python 实现一个深度学习模…

电通出席2024年世界经济论坛(WEF),重申推动可持续发展创新和人才培育的承诺

中国,上海——电通将出席世界经济论坛2024年新领军者年会(夏季达沃斯),本次大会将于6月25日至6月27日在中国大连举行。 2024年世界经济论坛主题为“未来增长的新前沿”,将聚焦于全球经济复苏、通胀缓解,以…

嵌入式linux系统中动态链接库实现详解

大家好,linux系统中动态库是如何实现相互链接的?今天简单聊聊动态链接库的实现原理。 假设有这样两段代码,第一段代码定义了一个全量变量a以及函数foo,函数foo中引用了下一段代码中定义的全局变量b。 第二段代码定义了全局变量b以及main函数,同时在main函数中调用了第一个…

WebSockets 完全指南:在 Postman 中测试实时通信

标题:WebSockets 完全指南:在 Postman 中测试实时通信 摘要 Postman 是 API 开发者广泛使用的工具,支持 RESTful API 的测试和调试。随着实时通信的兴起,WebSockets 协议变得日益重要。本文将详细介绍如何在 Postman 中测试 Web…

信号与系统、数字信号处理及通信原理课程深度解析与资源推荐

信号与系统、数字信号处理及通信原理课程深度解析与资源推荐 在电子工程、通信技术和计算机科学领域,信号与系统、数字信号处理和通信原理是三门至关重要的课程。它们不仅为学生提供了坚实的理论基础,也为后续的专业学习和工作实践奠定了坚实的基础。本…

计算文本相似度的几种方法

计算文本相似度的几种方法 大家好,我是免费搭建查券返利机器人省钱赚佣金就用微赚淘客系统3.0的小编,也是冬天不穿秋裤,天冷也要风度的程序猿!今天我们来探讨一下计算文本相似度的几种方法。文本相似度在自然语言处理&#xff08…

量子计算与AI融合:IBM引领未来计算新纪元

每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗?订阅我们的简报,深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同,从行业内部的深度分析和实用指南中受益。不要错过这个机会,成为AI领…

折半查找详解

一:折半查找概念 折半查找(也称为二分查找)是一种在有序数组中查找某一特定元素的搜索算法。搜索过程从数组的中间元素开始,如果中间元素正好是目标值,则搜索过程结束;如果目标值大于或小于中间元素&#x…