当前位置: 首页 > news >正文

《适配器模式(极简c++)》

        本文章属于专栏- 概述 - 《设计模式(极简c++版)》-CSDN博客


        本章简要说明适配器模式。本文分为模式说明、本质思想、实践建议、代码示例四个部分。

模式说明

  • 方案: 适配器模式,允许接口不兼容的类能够相互合作。它充当两个不兼容接口之间的桥梁。
  • 优点:
    • 解耦性增强: 允许不兼容的接口之间进行通信,降低系统组件间的耦合度。
    • 复用性增加: 可以重复使用现有的类,而不需要修改其原始代码。
  • 缺点:
    • 过多的适配器类: 如果系统中接口不兼容的类过多,可能会引入过多的适配器类,导致类的数量增加,复杂性提高。

本质思想:适配器模式通过引入一个适配器类来兼容不同接口,使得原本无法一起工作的类能够相互合作。它将一个类的接口转换成客户端所期望的另一个接口,使得原本由于接口不匹配而无法在一起工作的类能够协同工作。

实践建议:合并多个不同的类,提供同一的调用接口,是在应用维护中使用,以解决设计时未考虑到的共性问题。

代码示例

#include <iostream>// 鸟类
class Bird {
public:virtual void fly() const = 0;
};// 鸭子类
class Duck {
public:void quack() const {std::cout << "Quack" << std::endl;}void lowAltitudeFly() const {std::cout << "Duck flying at low altitude" << std::endl;}
};// 鸟适配器类,将鸭子适配成鸟类
class BirdAdapter : public Bird {
private:Duck duck;public:void fly() const override {duck.lowAltitudeFly();}
};// 客户端代码
int main() {Duck duck;BirdAdapter birdAdapter;std::cout << "Duck:" << std::endl;duck.lowAltitudeFly();std::cout << "BirdAdapter:" << std::endl;birdAdapter.fly();
/*
输出:
Duck:
Duck flying at low altitude
BirdAdapter:
Duck flying at low altitude
*/return 0;
}

 

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 基于 Linux 的更新版 MaxPatrol VM 可扫描 Windows
  • 时序预测 | Matlab实现BiTCN-BiLSTM双向时间卷积神经网络结合双向长短期记忆神经网络时间序列预测
  • chatgpt正面案例合集
  • YOLOv9改进策略:IoU优化 | Wasserstein Distance Loss,助力小目标涨点
  • OD C卷 - 分披萨
  • javaSwing坦克大战游戏
  • nginx配置详解+nginx_lua模块的使用
  • pytest之fixture结合conftest.py文件使用+断言实战
  • 【LVGL-微调部件(lv_spinbox_create)】
  • 【物联网开源平台】tingsboard安装与编译
  • python 中判断文件、目录是否存在的方法
  • 阿里云部署OneApi
  • 关于分布式系统设计的个人看法和经验
  • 2024-03-27 作业
  • CPP容器vector和list,priority_queue定义比较器
  • Computed property XXX was assigned to but it has no setter
  • C语言笔记(第一章:C语言编程)
  • LintCode 31. partitionArray 数组划分
  • mongodb--安装和初步使用教程
  • node 版本过低
  • rc-form之最单纯情况
  • 阿里云ubuntu14.04 Nginx反向代理Nodejs
  • 基于Android乐音识别(2)
  • 前嗅ForeSpider中数据浏览界面介绍
  • 实战|智能家居行业移动应用性能分析
  • 事件委托的小应用
  • 一个6年java程序员的工作感悟,写给还在迷茫的你
  • 小白应该如何快速入门阿里云服务器,新手使用ECS的方法 ...
  • ​​​【收录 Hello 算法】9.4 小结
  • ​Redis 实现计数器和限速器的
  • ​插件化DPI在商用WIFI中的价值
  • ​第20课 在Android Native开发中加入新的C++类
  • ​如何使用ArcGIS Pro制作渐变河流效果
  • #快捷键# 大学四年我常用的软件快捷键大全,教你成为电脑高手!!
  • (HAL)STM32F103C6T8——软件模拟I2C驱动0.96寸OLED屏幕
  • (博弈 sg入门)kiki's game -- hdu -- 2147
  • (二)【Jmeter】专栏实战项目靶场drupal部署
  • (附源码)springboot优课在线教学系统 毕业设计 081251
  • (五)大数据实战——使用模板虚拟机实现hadoop集群虚拟机克隆及网络相关配置
  • (自适应手机端)响应式服装服饰外贸企业网站模板
  • .net core 控制台应用程序读取配置文件app.config
  • .net Signalr 使用笔记
  • .NET 依赖注入和配置系统
  • .net6 core Worker Service项目,使用Exchange Web Services (EWS) 分页获取电子邮件收件箱列表,邮件信息字段
  • .NET开源项目介绍及资源推荐:数据持久层 (微软MVP写作)
  • .net通用权限框架B/S (三)--MODEL层(2)
  • .Net中间语言BeforeFieldInit
  • //TODO 注释的作用
  • @SuppressLint(NewApi)和@TargetApi()的区别
  • [] 与 [[]], -gt 与 > 的比较
  • [240903] Qwen2-VL: 更清晰地看世界 | Elasticsearch 再次拥抱开源!
  • [AI]ChatGPT4 与 ChatGPT3.5 区别有多大
  • [CISCN2019 华东南赛区]Web111
  • [Gradle] 在 Eclipse 下利用 gradle 构建系统
  • [GYCTF2020]Ez_Express