结构形模式---适配器模式

适配器模式是一种结构形模式,主要用于不同在两个互不兼容的类或者库之间增加一个转换。

适配器模式的实现由两种方式,一种是适配器对象,一种是适配器类。

适配器是对象是将第三方接口通过对象调用引入到适配器中。

适配器类是通过多继承将第三方接口继承到适配器类中。

使用场景:

1、当使用的类与其他接口代码不兼容的时候,可以使用适配器模式。

2、当继承于一个类,这个类的不同子类有不同的方法,这些方法不是这继承体系中所具有的共性问题。基可以使用适配器来实现这些不同的方法。

创建方式:

1、创建两个类,一个是接口类,一个三方类(正常是三方特定类);

2、创建一个继承于接口类的适配器类,这个适配器类接口要和接口类保持一致,在适配器中定义一个三方接口的引用。

3、客户端通过接口类的接口调用三方接口。

类关系结构:
在这里插入图片描述
代码:

#include "ShiPaiQi.h"

int main()
{
    std::cout << "欢迎东哥来到设计模式的世界!\n";

    NationPhone* nationPhone = new NationPhone();
    nationPhone->tranframe();
    cout << "=======================================" << endl;
    NationPhone* adapteePhone = new AdapteePhone();
    adapteePhone->tranframe();
}
#pragma once
#include "string.h"
#include "iostream"
using namespace std;
//三方接口
class EngishPhone {
public:
	EngishPhone();
	~EngishPhone();
	void EngishTranframe();

};

//统一接口
class NationPhone
{
public:
	EngishPhone _m_EngishPhone;
public:
	NationPhone();
	~NationPhone();
	virtual void  tranframe();
};

//适配器
class AdapteePhone : public NationPhone
{
public:
	AdapteePhone();
	~AdapteePhone();
	void  tranframe();
};

#include "ShiPaiQi.h"

EngishPhone::EngishPhone()
{
}

EngishPhone::~EngishPhone()
{
}

void EngishPhone::EngishTranframe()
{
	cout << "三方转换英语接口" << endl;
}

NationPhone::NationPhone()
{
}

NationPhone::~NationPhone()
{
}

void NationPhone::tranframe()
{
	cout << "调用基类翻译接口" << endl;
}

AdapteePhone::AdapteePhone()
{
}

AdapteePhone::~AdapteePhone()
{
}

void AdapteePhone::tranframe()
{
	cout << "调用适配器翻译接口" << endl;
	_m_EngishPhone.EngishTranframe();
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/969487.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

面向SDV的在环测试深度解析——概述篇

1.引言 在汽车行业迈向软件定义汽车&#xff08;SDV&#xff09;的进程中&#xff0c;传统的硬件在环&#xff08;HIL&#xff09;测试方案在面对新的技术架构和需求时逐渐显露出局限性。一方面&#xff0c;现代汽车的电子电气架构日益复杂&#xff0c;高性能计算&#xff08;…

2025年智慧城市解决方案下载:AI-超脑中台,体系架构整体设计

2025年&#xff0c;随着人工智能、物联网、大数据等新兴技术的深度融合&#xff0c;智慧城市解决方案正迈向更高层次的智能化和协同化阶段。其中&#xff0c;AI-超脑中台作为核心架构的一部分&#xff0c;为城市智能化运行提供了强大支撑。 智慧城市最新解决方案&#xff0c;标…

LINUX常用命令学习

查看系统版本 使用hostnamectl命令检查。hostnamectl显示了CentOS的版本以及操作系统的相关信息&#xff0c;非常方便 设置linux机器别名称 hostnamectl set-hostname 机器别名 --static 华为云 centos 命令&#xff1a;lsb_release -a linux:cat /proc/version 查看进程路…

RK3588 Linux平台部署DeepSeek模型教程

更多内容可以加入Linux系统知识库套餐&#xff08;教程&#xff0b;视频&#xff0b;答疑&#xff09; 文章目录 一、下载rknn-llm 和 deepseek模型二、RKLLM-Toolkit 安装2.1 安装 miniforge3 工具2.2 下载 miniforge3 安装包2.3 安装 miniforge3 三、创建 RKLLM-Toolkit Cond…

Azure从0到1

我能用Azure做什么? Azure提供100多种服务,能够从在虚拟机上运行现有应用程序到探索新的软件范式,如智能机器人和混合现实。许多团队开始通过将现有应用程序移动到在Azure中运行的虚拟机(VM)来探索云。将现有应用程序迁移到虚拟机是一个良好的开端,但云不仅仅是运行虚拟…

智慧城市V4系统小程序源码独立版全插件全开源

智慧城市V4系统小程序源码&#xff1a;多城市代理同城信息服务的全域解决方案 在数字化浪潮的推动下&#xff0c;智慧城市已成为全球发展的核心战略。作为这一领域的革新者&#xff0c;智慧城市V4系统小程序源码凭借其多城市代理同城信息服务能力与多商家营销功能&#xff0c;…

JAVA-Lambda表达式(高质量)

要了解Lambda表达式,首先需要了解什么是函数式接口&#xff0c;函数式接口定义&#xff1a;一个接口有且只有一个抽象方法 。 一、函数式接口 1.FunctionalInterger 注意&#xff1a; 1. 如果一个接口只有一个抽象方法&#xff0c;那么该接口就是一个函数式接口 2. 如果我们…

机器视觉--Halcon变量的创建与赋值

一、引言 在机器视觉领域&#xff0c;Halcon 作为一款强大且功能丰富的软件库&#xff0c;为开发者提供了广泛的工具和算子来处理各种复杂的视觉任务。而变量作为程序中存储和操作数据的基本单元&#xff0c;在 Halcon 编程中起着至关重要的作用。正确地创建和赋值变量是编写高…

优选驾考小程序

第2章 系统分析 2.1系统使用相关技术分析 2.1.1Java语言介绍 Java语言是一种分布式的简单的 开发语言&#xff0c;有很好的特征&#xff0c;在安全方面、性能方面等。非常适合在Internet环境中使用&#xff0c;也是目前企业级运用中最常用的一个编程语言&#xff0c;具有很大…

ubuntu 22.04 安装vsftpd服务

先决条件&#xff0c;确保你已经配置好了存储库。 安装vsftpd 为了方便实验&#xff0c;我已经切换到了root用户。 rootlocal:~# apt-get install vsftpd修改配置 配置文件在 /etc/vsftpd.conf rootlocal:~# grep -vE ^#|^$ /etc/vsftpd.conf listenNO listen_ipv6YES anonymou…

Uniapp 获取定位详解:从申请Key到实现定位功能

文章目录 前言一、申请定位所需的 Key1.1 注册高德开发者账号1.2 创建应用1.3 添加 Key 二、在 Uniapp 中配置定位功能2.1 引入高德地图 SDK2.2 获取定位权限 三、实现定位功能3.1 使用 uni.getLocation 获取位置3.2 处理定位失败的情况3.3 持续定位3.4 停止持续定位 四、总结 …

MATLAB电机四阶轨迹规划考虑jerk、Djerk

1、内容简介 略 126-可以交流、咨询、答疑 2、内容说明 略 在电机控制中&#xff0c;轨迹规划是一个重要的环节&#xff0c;它决定了电机如何从一个状态平滑地过渡到另一个状态。四阶轨迹规划考虑了位置、速度、加速度和加加速度&#xff08;jerk&#xff09;&#xff0c;有…

输电杆塔沉降智能监测系统:如何用数据守护电网安全

产品别称&#xff1a;输电线路杆塔沉降在线监测装置、输电线路北斗杆塔沉降在线监测装置、杆塔地基沉降监测设备、输电杆塔沉降智能监测系统 产品型号&#xff1a;TLKS-PMG-BDS 一、产品概述&#xff1a; 在电力传输系统中&#xff0c;输电线路杆塔的稳定性和安全性至关重要。…

Windows搭建SVN本地服务器 + TortoiseSVN客户端

目录 一、SVN服务器搭建 二、TortoiseSVN客户端 一、SVN服务器搭建 注意&#xff1a;例如你已经安装Subversion&#xff0c;要将它卸载&#xff0c;因为VisualSVN会包含Subversion&#xff0c;确保不会发生冲突&#xff0c;可在Windows程序搜索Subversion 卸载它。 Apache…

harmonyOS的文件的增、删、读、写相关操作(fs/content)

注意: 操作harmonyOS的文件只能对app沙箱内的文件进行操作 牵扯到两个支持点: fs和content这两个API; 具体的操作方法看下图: 创建文件 //js 引入 import fs from "ohos.files.fs" import featureAbility from "ohos.ability.featureAbility"; // 上下…

人才画像如何助力企业 “看准人”、“看透人”

在当今竞争激烈的商业世界中&#xff0c;企业对于人才的需求愈发迫切。然而&#xff0c;如何在众多求职者中 “看准人”、“看透人”&#xff0c;挑选出真正适合企业的人才&#xff0c;却成为了许多企业面临的难题。而人才画像的出现&#xff0c;为企业提供了一把有力的武器。 …

LC-搜索二维矩阵II、相交链表、反转链表、回文链表、环形链表、环形链表ll

搜索二维矩阵II 方法&#xff1a;从右上角开始搜索 我们可以从矩阵的右上角开始进行搜索。如果当前元素 matrix[i][j] 等于 target&#xff0c;我们直接返回 true。如果 matrix[i][j] 大于 target&#xff0c;说明 target 只能出现在左边的列&#xff0c;所以我们将列指针向左…

Win11配置wsl、ubuntu、docker

系统要求 安装WSL。 开通虚拟化&#xff1a; 准备工作 dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestartdism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestartwsl --set-default-versi…

达梦tpcc压测

造数 在这个日志输出中&#xff0c;主要执行了一系列数据库操作&#xff0c;涵盖了数据库信息检查、表的创建与数据加载、索引的添加、数据验证等步骤。具体分析如下&#xff1a; 数据库信息检查&#xff1a; 查询了数据库的版本、实例名称、日志文件大小、字符集等信息。 删…

MySQL技术公开课:Mysql-Server-8.4.4 Innodb 集群搭建与维护

MySQL技术公开课 - Mysql-Server-8.4.4 Innodb 集群搭建与维护 讲课内容&#xff1a; 1、Innodb集群框架介绍 2、Innodb集群部署(mysql-Server、mysql-shell、mysql-router安装配置) 3、Innodb集群维护(主备切换、启动与关闭、故障排除) Mysql-server商业版目前最新的是8.…