《适配器模式(极简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;
}

 

相关推荐

  1. 适配器模式c++)》

    2024-03-25 13:58:04       45 阅读
  2. 模版模式c++)》

    2024-03-25 13:58:04       33 阅读
  3. 《工厂模式c++)》

    2024-03-25 13:58:04       42 阅读
  4. 《原型模式c++)》

    2024-03-25 13:58:04       56 阅读
  5. 《过滤器模式c++)》

    2024-03-25 13:58:04       46 阅读
  6. 《组合模式c++)》

    2024-03-25 13:58:04       42 阅读
  7. 《外观模式c++)》

    2024-03-25 13:58:04       37 阅读
  8. 《备忘录模式c++)》

    2024-03-25 13:58:04       37 阅读
  9. 《命令模式c++)》

    2024-03-25 13:58:04       33 阅读
  10. 《状态模式c++)》

    2024-03-25 13:58:04       152 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-03-25 13:58:04       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-03-25 13:58:04       100 阅读
  3. 在Django里面运行非项目文件

    2024-03-25 13:58:04       82 阅读
  4. Python语言-面向对象

    2024-03-25 13:58:04       91 阅读

热门阅读

  1. 线程与进程的爱恨情仇???

    2024-03-25 13:58:04       43 阅读
  2. 微信小程序全局数据共享

    2024-03-25 13:58:04       42 阅读
  3. 封装的charts使用 vue2

    2024-03-25 13:58:04       37 阅读
  4. Springboot vue elementui 电子商城系统源码

    2024-03-25 13:58:04       35 阅读
  5. 蓝桥杯刷题--python-31-单调栈

    2024-03-25 13:58:04       37 阅读
  6. 2457. 美丽整数的最小增量

    2024-03-25 13:58:04       40 阅读
  7. 面试宝典:MySQL中索引为什么使用B+树的深度分析

    2024-03-25 13:58:04       36 阅读
  8. es同义词配置规则

    2024-03-25 13:58:04       43 阅读
  9. 天秀基础算法 - 二分查找和二分答案

    2024-03-25 13:58:04       32 阅读
  10. SpringCloud优缺点及适合场景

    2024-03-25 13:58:04       40 阅读
  11. npm 包管理工具:常用命令详解与使用指南

    2024-03-25 13:58:04       34 阅读
  12. kingbaseESV8分区表

    2024-03-25 13:58:04       35 阅读
  13. Github 2024-03-21 开源项目日报 Top10

    2024-03-25 13:58:04       30 阅读