小谈设计模式(18)—适配器模式

2023-10-05 20:16

本文主要是介绍小谈设计模式(18)—适配器模式,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

小谈设计模式(18)—适配器模式

  • 专栏介绍
    • 专栏地址
    • 专栏介绍
  • 适配器模式
    • 角色分析
      • 目标接口(Target)
      • 源接口(Adaptee)
      • 适配器(Adapter)
    • 核心思想
    • 应用场景
    • Java程序实现
      • 输出结果
      • 程序分析
        • 1
        • 2
        • 3
    • 优缺点分析
      • 优点
        • 1
        • 2
        • 3
      • 缺点
        • 1
        • 2
    • 总结

专栏介绍

专栏地址

link

专栏介绍

主要对目前市面上常见的23种设计模式进行逐一分析和总结,希望有兴趣的小伙伴们可以看一下,会持续更新的。希望各位可以监督我,我们一起学习进步,加油,各位。
在这里插入图片描述

适配器模式

适配器模式是一种结构型设计模式,它允许将一个类的接口转换成客户端所期望的另一个接口。适配器模式使得原本由于接口不兼容而不能一起工作的类可以一起工作。
在这里插入图片描述

角色分析

目标接口(Target)

客户端期望的接口,适配器将原始接口转换成目标接口。

源接口(Adaptee)

需要被适配的类或接口。

适配器(Adapter)

实现目标接口,同时持有源接口的实例,将目标接口的方法调用转发给源接口的实例。

核心思想

通过适配器将目标接口的方法调用转发给源接口的实例。这样一来,客户端就可以通过目标接口来使用源接口的功能。

在这里插入图片描述

应用场景

当需要使用一个已经存在的类,但其接口不符合需求时,可以使用适配器模式。例如,使用第三方库提供的接口,但需要将其转换成自己系统中的接口。
当需要复用一些已经存在的类,但是接口与系统的其他部分不兼容时,可以使用适配器模式。例如,将不同数据库的操作接口统一成一个接口。
在这里插入图片描述

Java程序实现

// 目标接口
interface Target {void request();
}// 源接口
class Adaptee {void specificRequest() {System.out.println("Adaptee: specificRequest");}
}// 适配器
class Adapter implements Target {private Adaptee adaptee;Adapter(Adaptee adaptee) {this.adaptee = adaptee;}@Overridepublic void request() {adaptee.specificRequest();}
}// 客户端代码
public class Client {public static void main(String[] args) {Adaptee adaptee = new Adaptee();Target target = new Adapter(adaptee);target.request();}
}

在这里插入图片描述

输出结果

Adaptee: specificRequest

这说明适配器模式成功地将不兼容的接口转换成了兼容的接口,使得客户端可以使用目标接口来调用源接口的功能。

程序分析

1

在上面的示例中,我们有一个目标接口Target,其中定义了客户端所期望的方法request。我们还有一个源接口Adaptee,其中有一个不兼容的方法specificRequest。

2

为了使得客户端可以使用Target接口来调用specificRequest方法,我们创建了一个适配器Adapter,实现了Target接口,并持有一个Adaptee的实例。在适配器的request方法中,我们将Target接口的方法调用转发给Adaptee的specificRequest方法。

3

在客户端代码中,我们创建了一个Adaptee实例和一个适配器Adapter实例,并将Adaptee实例传递给适配器的构造函数。然后,我们使用Target接口来调用request方法,实际上是调用了Adaptee的specificRequest方法。
在这里插入图片描述

优缺点分析

优点

1

适配器模式可以让不兼容的接口协同工作。

2

适配器模式可以复用已有的类,而无需修改其源代码。

3

适配器模式可以将不同接口的类组合在一起工作。

缺点

1

适配器模式增加了系统的复杂性,因为需要增加一个适配器类。

2

适配器模式可能会降低系统的性能,因为需要进行额外的转换操作。
在这里插入图片描述

总结

适配器模式可以将不兼容的接口转换成兼容的接口,使得原本无法一起工作的类可以协同工作。它是一种非常常用的设计模式,可以提高系统的灵活性和可扩展性。

这篇关于小谈设计模式(18)—适配器模式的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/151959

相关文章

Linux系统配置NAT网络模式的详细步骤(附图文)

《Linux系统配置NAT网络模式的详细步骤(附图文)》本文详细指导如何在VMware环境下配置NAT网络模式,包括设置主机和虚拟机的IP地址、网关,以及针对Linux和Windows系统的具体步骤,... 目录一、配置NAT网络模式二、设置虚拟机交换机网关2.1 打开虚拟机2.2 管理员授权2.3 设置子

SpringBoot如何通过Map实现策略模式

《SpringBoot如何通过Map实现策略模式》策略模式是一种行为设计模式,它允许在运行时选择算法的行为,在Spring框架中,我们可以利用@Resource注解和Map集合来优雅地实现策略模式,这... 目录前言底层机制解析Spring的集合类型自动装配@Resource注解的行为实现原理使用直接使用M

C#原型模式之如何通过克隆对象来优化创建过程

《C#原型模式之如何通过克隆对象来优化创建过程》原型模式是一种创建型设计模式,通过克隆现有对象来创建新对象,避免重复的创建成本和复杂的初始化过程,它适用于对象创建过程复杂、需要大量相似对象或避免重复初... 目录什么是原型模式?原型模式的工作原理C#中如何实现原型模式?1. 定义原型接口2. 实现原型接口3

大数据spark3.5安装部署之local模式详解

《大数据spark3.5安装部署之local模式详解》本文介绍了如何在本地模式下安装和配置Spark,并展示了如何使用SparkShell进行基本的数据处理操作,同时,还介绍了如何通过Spark-su... 目录下载上传解压配置jdk解压配置环境变量启动查看交互操作命令行提交应用spark,一个数据处理框架

Java实现状态模式的示例代码

《Java实现状态模式的示例代码》状态模式是一种行为型设计模式,允许对象根据其内部状态改变行为,本文主要介绍了Java实现状态模式的示例代码,文中通过示例代码介绍的非常详细,需要的朋友们下面随着小编来... 目录一、简介1、定义2、状态模式的结构二、Java实现案例1、电灯开关状态案例2、番茄工作法状态案例

Python实现数据清洗的18种方法

《Python实现数据清洗的18种方法》本文主要介绍了Python实现数据清洗的18种方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学... 目录1. 去除字符串两边空格2. 转换数据类型3. 大小写转换4. 移除列表中的重复元素5. 快速统

在JS中的设计模式的单例模式、策略模式、代理模式、原型模式浅讲

1. 单例模式(Singleton Pattern) 确保一个类只有一个实例,并提供一个全局访问点。 示例代码: class Singleton {constructor() {if (Singleton.instance) {return Singleton.instance;}Singleton.instance = this;this.data = [];}addData(value)

模版方法模式template method

学习笔记,原文链接 https://refactoringguru.cn/design-patterns/template-method 超类中定义了一个算法的框架, 允许子类在不修改结构的情况下重写算法的特定步骤。 上层接口有默认实现的方法和子类需要自己实现的方法

【iOS】MVC模式

MVC模式 MVC模式MVC模式demo MVC模式 MVC模式全称为model(模型)view(视图)controller(控制器),他分为三个不同的层分别负责不同的职责。 View:该层用于存放视图,该层中我们可以对页面及控件进行布局。Model:模型一般都拥有很好的可复用性,在该层中,我们可以统一管理一些数据。Controlller:该层充当一个CPU的功能,即该应用程序

迭代器模式iterator

学习笔记,原文链接 https://refactoringguru.cn/design-patterns/iterator 不暴露集合底层表现形式 (列表、 栈和树等) 的情况下遍历集合中所有的元素