适配器模式【结构型模式C++】

1.概述

    适配器模式是一种结构型设计模式, 又称为变压器模式、包装模式(Wrapper) 将一个类的接口变换成客户端所期待的另一种接口,从而使原本因接口不匹配而无法在一起工作的两个类能够在一起工作。

2.结构

  • Target:适配器的内容,例如客户端使用的目标接口;
  • Adaptee:被适配的内容,例如不兼容的接口;
  • Adapter:适配器,把 Adaptee 适配成 Target

3.实现 

3.1 实例类比

       在生活中存在各类适配器,交流电220V会转化为各类所需电压, 以手机适配器为例。在给手机充电 手机充电器相当于 Adapter适配器 ,220V的交流电 相当于 Adaptee 被适配者5V的直流电 相当于 Target目标 

3.2 具体实现
#include <iostream>
#include <string>
using namespace std;//被适配类即待转化的类
class Adaptee {
public:int OutPut220V() {std::cout << "正常220V电压..." << endl;return 220;}
};//转化目标
class Target {
public:virtual int OutPut5V()=0;
};//适配器
class Adapter :public Target {
public:int OutPut5V() {//输入的待转化电压int a = inPut_->OutPut220V();//转化方法int b = a / 44;//返回转化结果std::cout << "220V电压转化为5V电压..." << endl;return b;}void SetInpt(Adaptee * inPut) {inPut_ = inPut;}private:Adaptee * inPut_;
};int main()
{Adaptee * input_ = new Adaptee();Adapter * adater_ = new Adapter();adater_->SetInpt(input_);adater_->OutPut5V();return 0;
}
3.3运行结果

4.状态设计模式优缺点   

   优点: 
  • 将目标类和适配者类解耦
  • 增加了类的透明性和复用性,将具体的实现封装在适配者类中,对于客户端类来说是透明的,而且提高了适配者的复用性
  • 灵活性和扩展性都非常好,符合开闭原则。如果不想用就可以卸载适配器
   缺点:
  • 过多地使用适配器,会让系统非常零乱,不易整体进行把握。
  • 由于 JAVA 至多继承一个类,所以至多只能适配一个适配者类,而且目标类必须是抽象类。

5 应用场景

  • 两个类所做的事情相同或相似,但是具有不同的接口时要使用
  • 在双方都不太容易修改的时候再使用适配器模式适配,而不是一有不同时就使用它。
  • 系统需要使用一些现有的类,而这些类的接口与系统要求的接口不兼容。
  • 需要创建一个可复用的类,该类与一些不兼容的类合作工作,而不是修改这些类的代码。
  • 在已有的系统中,希望增加一些额外的功能,而这些功能需要与已有的类协同工作,但是不能对这些类进行修改。

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

python3如何提取汉字

采用正则表达式的方法对字符串进行处理。 str1 "&#xff5b;我%$是&#xff0c;《速$.度\发》中 /国、人"&#xff08;1&#xff09;提取汉字 汉字的范围为”\u4e00-\u9fa5“&#xff0c;这个是用Unicode表示的。 import re res1 .join(re.findall([\u4e00-\u9fa…

排序 “叁” 之交换排序

目录 1. 基本思想 2.冒泡排序 2.1 基本思想 2.2 代码示例 2.3 冒泡排序的特性总结 3.快速排序 3.1 基本思想 &#x1f335;hoare版本 &#x1f335;挖坑法 ​编辑 &#x1f335;前后指针版本 ​编辑 3.2 快速排序优化 &#x1f33b;三数取中法选key 3.4 快速排序…

命理八字之电子木鱼的代码实现

#uniapp# #电子木鱼# 不讲废话&#xff0c;上截图 目录结构如下图 功能描述&#xff1a; 点击一下&#xff0c;敲一下&#xff0c;伴随敲击声&#xff0c;可自动点击。自动点击需看视频广告&#xff0c;或者升级VIP会员。 疑点解答&#xff1a; 即animation动画的时候&…

git 基础配置

一、下载git sudo apt install git -y二、用户信息配置 $ git config --global user.name "John Doe" $ git config --global user.email johndoeexample.com检查配置信息 git config --list三、ssh密钥生成 1、进入~/.ssh mkdir ~/.ssh cd ~/.ssh2、生成密钥 …

计算机网络基础1--基础概念

1. IP地址 1.1 IPv4地址 分为网络号和主机号 地址块的第一个地址和最后一个地址通常不使用。 广播地址为主机号全取1的情况。 2. 常用报文格式 2.0 ethernet协议 2.1 arp协议 2.2 ip协议 2.3 tcp协议 2.4 udp协议 2.5 icmp协议

电磁兼容(EMC):静电放电(ESD)抗扰度试验深度解读(三)

目录 1. 静电抗扰度试验标准试验程序定制的目的 2. 环境条件对充电量的影响 3. 环境级别与空气和接触放电的关系 4. 试验等级的选择 1. 静电抗扰度试验标准试验程序定制的目的 保护设备免受静电放电影响的问题对制造厂和用户来说都是相当重要的。 随着微电子元件的广泛应用…

安装多个MySQL版本时如何连接到不同的数据库

当安装多个版本的数据库时&#xff0c;不同版本的端口名不一样&#xff0c;可以使用以下命令进行连接 mysql -uroot -p数据库密码 -h主机名 -P端口号 数据库主机名默认是localhost&#xff0c;端口号默认是3306&#xff0c;当安装多个版本数据库时&#xff0c;需要记住数据库的…

ssm069端游账号销售管理系统+jsp

端游账号销售管理系统的设计与实现 摘 要 互联网发展至今&#xff0c;无论是其理论还是技术都已经成熟&#xff0c;而且它广泛参与在社会中的方方面面。它让信息都可以通过网络传播&#xff0c;搭配信息管理工具可以很好地为人们提供服务。针对端游账号销售信息管理混乱&…

Android Studio实现页面跳转

建立文件 temp.xml <?xml version"1.0" encoding"utf-8"?> <LinearLayout xmlns:android"http://schemas.android.com/apk/res/android"android:layout_width"match_parent"android:layout_height"match_parent"…

利用RFID无线射频技术,实现商品防伪和溯源信息管理

近几年来&#xff0c;伴随着信息化产业的快速发展&#xff0c;企业对于产品在生产、流通、分销和零售等环节的实时跟踪和监管的需求日趋强烈。同时企业在经营过程中不可避免地要在不同区域实行差异化的经销商拿货价格&#xff0c;从而导致窜货现象时有发 生&#xff0c;为企业带…

为啥转化为可编辑面片后有这么多点和线

可以删一下 按住alt按移除可以删掉 选择你要删的那些线 按住alt点移除

Llama 3 实测效果炸裂,一秒写数百字(附镜像站)

这几天大火的llama 3刚刚在https://askmanyai.cn上线了&#xff01; 玩了一会儿&#xff0c;这个生成速度是真的亚麻呆住。文案写作和代码生成直接爽到起飞&#xff0c;以往gpt要写一两分钟的千字文&#xff0c;llama 3几秒钟就写完了。而且效果甚至感觉更好&#xff1f; 效果惊…