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

server/2025/2/14 3:33:37/

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

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

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

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

使用场景:

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();
}

http://www.ppmy.cn/server/167507.html

相关文章

Python3连接MongoDB并写入数据

个人博客地址&#xff1a;Python3连接MongoDB并写入数据 | 一张假钞的真实世界 安装PyMongo $ pip3 install pymongo Successfully installed pymongo-3.7.2 连接MongoDB并且批量插入操作 #!/usr/bin/python3import mysql.connector import gzip import json from pymongo …

【自学笔记】AIGC基础知识点总览-持续更新

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 AIGC基础知识点总览一、AIGC概述二、AIGC的核心要素三、AIGC的关键技术1. 深度学习算法2. 自然语言处理&#xff08;NLP&#xff09;3. 计算机视觉&#xff08;CV&a…

使用itextpdf动态生成PDF

前言 在有些场景下我们可能需要根据指定的模板来生成 PDF&#xff0c;比如说合同、收据、发票等等。因为 PDF 是不可编辑的&#xff0c;所以用代码直接对 PDF 文件进行修改是很不方便的&#xff0c;这里我是通过 itext 和 Adobe Acrobat 来实现的&#xff0c;以下就是具体实现…

KVM虚拟化快速入门,最佳的开源可商用虚拟化平台

引言 在信息技术飞速发展的时代&#xff0c;服务器资源的高效利用成为企业关注的焦点。KVM 虚拟化作为一种先进的虚拟化技术&#xff0c;在众多虚拟化方案中脱颖而出&#xff0c;为企业实现服务器资源的优化配置提供了有效途径。 以往&#xff0c;物理服务器的资源利用效率较…

[MySQL]3-MySQL查询性能优化

目录 &#x1f31f;慢查询基础&#xff1a;优化数据访问 不必要的数据 MySQL扫描额外的记录 访问类型 重构查询的方式 切分查询&#xff08;分治&#xff09; 分解联接查询 特定类型查询优化 优化count查询 使用近似值 覆盖索引 优化LIMIT和OFFSET 使用覆盖索引的…

MySQL 安装配置(完整教程)

文章目录 一、MySQL 简介二、下载 MySQL三、安装 MySQL四、配置环境变量五、配置 MySQL 5.1 初始化 MySQL5.2 启动 MySQL 服务 六、修改 MySQL 密码七、卸载 MySQL八、结语 一、MySQL 简介 MySQL 是一款广泛使用的开源关系型数据库管理系统&#xff08;RDBMS&#xff09;&am…

docker发布自己的镜像

官方node-red镜像&#xff1a; nodered/node-red - Docker Image 拉取v3版本&#xff1a; docker pull nodered/node-red:3.1.14 运行镜像&#xff1a; docker run --restartalways --privilegedtrue -d -p 1880:1880 -v node_red_data:/data --name mynodered nodered/n…

【Android开发】安卓手机APP使用机器学习进行QR二维码识别

前言:本项目是一个 Android 平台的二维码扫描应用,具备二维码扫描和信息展示功能。借助 AndroidX CameraX 库实现相机的预览、图像捕获与分析,使用 Google ML Kit 进行二维码识别。为方便大家了解项目全貌,以下将介绍项目核心代码文件 MainActivity.java 和 AndroidManifes…