设计模式 | 适配器模式

简介: 适配器模式将现有接口转化为客户类所期望的接口,实现了对现有类的复用,使用的前提是不能或不想修改原来的适配者接口和抽象目标类接口。适配器模式更多的是强调对代码的组织,而不是功能的实现。它是一种使用频率非常高的设计模式,在软件开发中得到了广泛的应。

| 适配器模式概述

我们联想一下常见的生活现象,我们国家的生活用电的电压是 220V,而手机,笔记本,电视机等的设备的实际工作电压没有这么高,为了使这些设备可以使用 220V 的生活用电,需要电源适配器(AC Adpater),也就是充电器或变压器,有了这个电源适配器,原本不能直接工作的生活电器等设备就可以兼容使用了,而这其中的电源适配器就充当了一个适配器的角色。

image.png

同样的在软件开发中,有时也会出现这种类似的不兼容的情况,我们也可以像引入一个电源适配器那样引入一个称之为适配器的角色来协调这些相互之间存在不兼容的结构,这种设计方案即为适配器模式。

与电源适配器相似,在适配器模式中引人了一个被称为适配器(Adapter)的包装类,而它所包装的对象称为适配者(Adaptee),即被适配的类。适配器的实现就是把客户类的请求转化为对适配者的相应接口的调用。也就是说:当客户类调用适配器的方法时,在适配器类的内部将调用适配者类的方法,而这个过程对客户类是透明的,客户类并不直接访问适配者类。因此,适配器让那些由于接口不兼容而不能交互的类可以一起工作。

1.1 适配器模式的定义

  • 适配器模式:将一个类的接 口转换成客户希望的另一个接口。适配器模式让那些接口不兼容的类可以一起工作。
  • Adapter Pattern: Convert the interface of a class into another interface clients expect. Adapter lets casses work together that could't otherwise because of icompaible nteraces.

适配器模式可以将一个类的接口和另外一个类的接口匹配起来,而无需修改原来的适配者接口和抽象目标接口类。

适配器模式的别名为包装器(Wrapper)模式,它既可以作为类结构型模式,也可以作为对象结构型模式。在适配器模式定义中所提及的接口是指广义的接口,它可以表示一个方法或者方法的集合。

2 | 适配器模式的结构与实现

适配器模式包括类适配器和对象适配器。在对象适配器模式中,适配器与适配者之间是关联关系;在类适配器模式中,适配器与适配者之间是继承(或实现)关系。下面分别对两种适配器进行结构分析。

2.1 适配器模式的结构

适配器模式包含以下 3 个角色

  • (1) Target(目标抽象类):目标抽象类定义客户所需的接口,可以是一个抽象类或接口,也可以是具体类。在类适配器中,由于 C# 语言特性单一继承和多接口扩展。
  • (2) Adapter(适配器类):它可以调用另一个接口,作为一个转换器,对 Adaptee 和 Target 进行适配。适配器 Adapter 是适配器模式的核心,在类适配器中,它通过实现 Target 接口并继承 Adaptee 类来使二者产生联系,在对象适配器中,它通过继承 Target 并关联一个 Adaptee 对象是二者产生联系。
  • (3) Adaptee(适配者类):适配者即被适配的角色,它定义了一个已经存在的接口,这个接口需要适配,适配者类一般是一个具体类,句含了客户希望使用的业务方法,在某些情况下甚至没有适配者类的源代码。

2.2 适配器模式的实现

由于适配器模式包括类适配器模式和对象适配器模式两种形式,下面分别介绍这两种适配器模式的实现机制。

2.2.1 类适配器

在类适配器中,适配者类 Adaptee 没有 Beavast() 方法,而客户期待这个方法,但在适配者类中实现了 SpecificRequest() 方法,该方法所提供的实现正是客户所需要的。为了使客户能够使用适配者类,提供了一个中间类,即适配磊类 Adaptee ,适配磊类实现了物象目标类接口 Target ,并继承了适配者类,在适配器类的 Reqpest() 方法中调用所继承的适配者类的 SpecificRequest() 方法,达到了适配的目的,因为适配器类与适配者类是继承关系,所以这种适配器模式称为类适配器模式。

典型的类适配器代码如下:

目录
相关文章
|
7月前
|
设计模式 Java API
重构旧代码的秘诀:用设计模式 - 适配器模式(Adapter)给Java项目带来新生
【4月更文挑战第7天】适配器模式是解决接口不兼容问题的结构型设计模式,通过引入适配器类实现目标接口并持有不兼容类引用,实现旧代码与新接口的协作。适用于处理兼容性问题、整合遗留代码和集成第三方库。应用时,识别不兼容接口,创建适配器类转换方法调用,然后替换原有引用。注意保持适配器简单、使用组合和考虑扩展性。过度使用可能导致系统复杂和维护成本增加,应谨慎使用。
116 4
|
7月前
|
设计模式 Java 中间件
23种设计模式,适配器模式的概念优缺点以及JAVA代码举例
【4月更文挑战第6天】适配器模式(Adapter Pattern)是一种结构型设计模式,它的主要目标是让原本由于接口不匹配而不能一起工作的类可以一起工作。适配器模式主要有两种形式:类适配器和对象适配器。类适配器模式通过继承来实现适配,而对象适配器模式则通过组合来实现
113 4
|
5天前
|
设计模式 JSON 前端开发
前端必须掌握的设计模式——适配器模式
适配器模式是一种结构型设计模式,用于使接口不兼容的对象能够相互合作。通过在客户端和系统之间引入一个“中间层”适配器,将不同类型的输入数据转换为系统能处理的标准格式,减轻系统的负担,提高扩展性和可维护性。例如,MacBook的扩展坞将多种接口(如HDMI、USB)转换为Type-C接口,实现多接口兼容。
|
3月前
|
设计模式 Java 程序员
Java设计模式-适配器模式(8)
Java设计模式-适配器模式(8)
|
7月前
|
设计模式 Java
【设计模式】JAVA Design Patterns——Adapter(适配器模式)
【设计模式】JAVA Design Patterns——Adapter(适配器模式)
|
2月前
|
设计模式 Java
Java设计模式之适配器模式
这篇文章详细讲解了Java设计模式中的适配器模式,包括其应用场景、实现方式及代码示例。
56 0
|
3月前
|
设计模式 Java
设计模式--适配器模式 Adapter Pattern
这篇文章介绍了适配器模式,包括其基本介绍、工作原理以及类适配器模式、对象适配器模式和接口适配器模式三种实现方式。
|
4月前
|
设计模式 XML 存储
【六】设计模式~~~结构型模式~~~适配器模式(Java)
文章详细介绍了适配器模式(Adapter Pattern),这是一种结构型设计模式,用于将一个类的接口转换成客户期望的另一个接口,使原本不兼容的接口能够一起工作,提高了类的复用性和系统的灵活性。通过对象适配器和类适配器两种实现方式,展示了适配器模式的代码应用,并讨论了其优点、缺点以及适用场景。
|
6月前
|
设计模式
适配器模式-大话设计模式
适配器模式-大话设计模式
|
5月前
|
设计模式 Go 数据处理
iLogtail设计模式问题之在iLogtail中,为何需要使用适配器模式
iLogtail设计模式问题之在iLogtail中,为何需要使用适配器模式