适配器模式【对象适配器模式和类适配器模式,以及具体使用场景】

news/2024/12/22 1:02:43/

2.1-适配器模式

​ 类的适配器模式是把适配者类的API转换成为目标类的API,适配器模式使得原来由于接口不兼容而不能一起工作的那些类可以一起工作,其实在具体的开发中,对于自己系统一开始的设计不会优先考虑适配器模式,通常会将接口设置成兼容的,但是难免会有设计的缺陷,导致接口不兼容的类需要一起工作,这时候就可以使用适配器模式进行转换;其次适配器模式经常用于接入第三方系统,由于第三方系统与我们系统不兼容,我们也不会因为接入这个三方系统而去修改我们现有的接口,因此一般会使用适配器模式进行接口转换。

适配器模式主要包含如下几种角色

  • 适配器类:适配器模式的核心,里面编写适配转换的代码,是一个类
  • 目标类:最终客户端所需要的接口,可以是接口、抽象类、具体类,在适配器中,由于Java不支持类的多继承,因此在Java的适配器模式中只能是接口,在对象适配器模式中可以是类
  • 适配者类:里面包含了客户端所需要的API,适配者类一般是一个具体的类

适配器模式主要包括两种实现形式,类适配器对象适配器,其实这两种的主要区别就在于适配者类所处的位置,接下来我们分别介绍

2.1.1-类适配器模式

​ 类适配器模式中,适配器类会实现目标类,然后继承适配者类,由于Java类不能多继承,所以适配器模式中目标类只能是一个接口,代码示例如下:

适配者类

/*** 适配者* @author Liu Hanlin* @create 2024-09-30 22:14*/
public class ClsAdaptee {/*** 基础请求API* @return*/public String baseRequestAPI(){return "基础请求API";}
}

目标类

/*** 目标类* @author Liu Hanlin* @create 2024-09-30 22:13*/
public interface ClsTarget {/*** 目标请求API* @return*/String request();
}

适配器类

/*** 类适配器* @author Liu Hanlin* @create 2024-09-30 22:12*/
public class ClsAdapter extends ClsAdaptee implements ClsTarget{@Overridepublic String request() {return this.baseRequestAPI();}
}
2.1.2-对象适配器模式

​ 对象适配器模式中,适配器类会继承或实现目标类,然后将适配者类作为适配器的一个属性,在重写目标类的方法时,调用适配者类的方法,具体代码如下

适配者类

/*** 适配者类* @author Liu Hanlin* @create 2024-09-30 22:20*/
public class ObjAdaptee {/*** 基础请求API* @return*/public String baseRequestAPI(){return "基础请求API";}
}

目标类

/*** 目标类【对象适配器模式中,目标类可以是抽象类和具体类】* @author Liu Hanlin* @create 2024-09-30 22:21*/
public abstract class ObjTarget {/*** 目标请求API* @return*/abstract public String request();
}

适配器类

/*** 适配器* @author Liu Hanlin* @create 2024-09-30 22:20*/
public class ObjAdapter extends ObjTarget{ObjAdaptee adaptee = new ObjAdaptee();@Overridepublic String request() {return adaptee.baseRequestAPI();}
}

如上就是适配器模式的具体代码以及具体解释。


http://www.ppmy.cn/news/1533780.html

相关文章

滚雪球学MySQL[8.3讲]:数据库中的JSON与全文检索详解:从数据存储到全文索引的高效使用

全文目录: 前言8.3 JSON与全文检索1. JSON数据类型的使用1.1 JSON 数据类型概述1.2 JSON 数据的插入与查询1.3 JSON 常用函数与操作1.4 JSON使用的优缺点与性能考虑 2. 全文索引与全文检索2.1 全文索引概述2.2 全文检索的使用2.3 全文检索模式2.4 全文索引优化与性能…

Electron 安装以及搭建一个工程

安装Node.js 在使用Electron进行开发之前,需要安装 Node.js。 官方建议使用最新的LTS版本。 检查 Node.js 是否正确安装: # 查看node版本 node -v # 查看npm版本 npm -v注意 开发者需要在开发环境安装 Node.js 才能编写 Electron 项目,但是…

QT系统学习篇(3)- Qt开发常用算法及控件原理

一、Qt中 Qt框架中和模块提供一些算法和常用函数 比如 double d1-59.6,d292.5;double d3qAbs(d1);double d4qMax(d1,d2);qDebug()<<"d3"<<d3<<"d4"<<d4<<endl;二、Qt窗口及控件原理设计 理解Qt窗口的生成、属性 1、Qt窗口…

Windows 环境搭建 CUDA 和 cuDNN 详细教程

CUDA CUDA&#xff08;Compute Unified Device Architecture&#xff09;是由NVIDIA公司推出的一个并行计算平台和编程模型&#xff0c;它允许开发者使用NVIDIA GPU进行通用计算&#xff08;即GPGPU&#xff09;&#xff0c;从而加速各种计算密集型任务。CUDA提供了一套基于C/C…

Linux·进程概念(下)

1. 进程优先级 优先级就是获得某种资源的先后顺序&#xff0c;因为CPU资源是有限的&#xff0c;因此各个进程之间要去争取CPU的资源。 那么针对Linux操作系统下的PCB中&#xff0c;也就是task_struct结构体中&#xff0c;使用了int类型的变量记录了每个进程的优先级属性&#x…

使用 lstm + crf 实现NER

条件随机场CRF 前言 CRF是给定一组输入随机变量条件下另一组输出随机变量的条件概率分布的模型。特点&#xff1a;假设输出随机变量构成马尔卡夫随机场。CRF可以用于不同的预测问题。但是主要讨论线性链条件随机场&#xff0c;这时问题变成了由输入序列对输出序列的判别模型&…

[RabbitMQ] RabbitMQ介绍,安装与快速上手

&#x1f338;个人主页:https://blog.csdn.net/2301_80050796?spm1000.2115.3001.5343 &#x1f3f5;️热门专栏: &#x1f9ca; Java基本语法(97平均质量分)https://blog.csdn.net/2301_80050796/category_12615970.html?spm1001.2014.3001.5482 &#x1f355; Collection与…

高斯消元 笔记

高斯消元 高斯消元&#xff1a;解线性方程组 有 n n n 个未知数&#xff1a; x 1 , x 2 , . . . , x n x_1,x_2,...,x_n x1​,x2​,...,xn​ a 1 1 x 1 1 a 1 2 x 1 2 . . . a 1 n x 1 n b 1 a_{1_1}x_{1_1}a_{1_2}x_{1_2}...a_{1_n}x_{1_n}b_1 a11​​x11​​a12​​x1…