在软件开发中,我们经常会遇到这样的情况:我们需要使用一个现有的类或者接口,但它与我们系统的目标接口不兼容,而我们又不能修改它 。这时候,我们该怎么办呢?大多数情况下我们都可以使用适配器模式来解决这个问题,本文将从以下四个方面讲解适配器模式 。
- 简介
- 优缺点
- 应用场景
- JAVA 代码示例
文章插图
对象适配器模式的各角色定义如下 。
- Target(目标接口):客户端要使用的目标接口标准,对应下文中的三相插孔接口 TriplePin 。
- Adapter(适配器):实现了目标接口,负责适配(转换)被适配者的接口 specificRequest()为目标接口 request(),对应本章下文中的电视机专属适配器类 TriplePinAdapter 。
- Adaptee(被适配者):被适配者的接口标准,目前不能兼容目标接口的问题接口,可以有多种实现类,对应下文中的两相插孔接口 DualPin 。
- Client(客户端):目标接口的使用者 。
- 适配器模式可以增强程序的可扩展性,通过使用适配器,可以在不修改原有代码的基础上引入新的功能或者接口 。
- 适配器模式可以提高类的复用性,通过使用适配器,可以将已有的类或者接口重新组合和封装,使其符合新的需求 。
- 适配器模式可以增加类的透明度,通过使用适配器,客户端只需要关注目标接口,而无需了解被适配者的具体实现 。
- 适配器模式可以灵活地切换不同的被适配者,通过使用不同的适配器,可以动态地选择不同的被适配者来满足不同的场景 。
- 适配器模式会增加系统的复杂性,过多地使用适配器会使系统变得零乱和难以理解 。
- 适配器模式可能会降低系统的性能,因为每次调用目标接口时都需要经过适配器的转换 。
- 适配器模式可能会违反开闭原则,如果目标接口发生变化,则需要修改所有的适配器类 。
- 当需要在一个已有系统中引入新的功能或者接口时,它与系统的目标接口不兼容,但又不能修改原有代码时,可以使用适配器模式 。例如在一个数据库操作系统中,如果想要支持多种类型的数据库源,但系统只提供了一个固定类型数据库源的操作接口时,可以使用一个数据库源操作适配器来将不同类型数据库源转换成统一类型数据库源 。
- 当需要在多个独立开发的系统或者组件之间进行协作时,但由于各自采用了不同的接口或者协议时,可以使用适配器模式 。例如在一个分布式服务系统中,如果想要让不同语言编写的服务之间进行通信和调用,但各自采用了不同的通信协议和数据格式时,可以使用一个服务通信适配器来将不同协议和数据格式转换成统一协议和数据格式 。
- 定义目标接口:三相插口 TriplePin,其中 3 个参数 l、n、e 分别对应火线(live)、零线(null)和地线(earth) 。
public interface TriplePin {public void electrify(int l, int n, int e);}
- 定义被适配者接口:两项插口 DualPin,可以看到参数中缺少了地线 e 参数 。
推荐阅读
- AI如何生成一个自己的数字人?
- 小红书博主如何赚钱的?小红书的3大变现方法
- 如何在 SQL Server 中备份和恢复数据库
- Spring中Bean的作用域Scope你知道多少?如何自定义作用域?
- 如何使用Python构建一个抄袭检测系统?
- 电脑水冷液多久换一次如何换 电脑水冷液多久换一次
- 微信怎么才可以已开双封 微信如何开双封?
- 如何鉴别真假蓝莓干视频 如何鉴别真假蓝莓干
- 如何挑选领带 怎样挑选领带
- 芒果汁弄衣服上如何清洗