码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • C++设计模式之适配器模式


    设计模式

    • 适配器结构和组成
      • 结构和组成
      • 示例
        • 1.定义目标接口
        • 2.实现适配者
        • 3.实现适配器
        • 4.客户端代码
      • 解释

    适配器结构和组成

    适配器模式(Adapter Pattern)是一种结构型设计模式,它允许将一个类的接口转换成客户希望的另一个接口。这种模式通常用于使原本由于接口不兼容而不能一起工作的类能够协同工作。

    结构和组成

    适配器模式涉及以下几个核心组件:
    目标接口(Target Interface):客户端期望的接口,也是适配器要实现的接口。
    适配器(Adapter):适配器是一个实现了目标接口的类,它持有一个对适配者对象的引用,并将客户端的请求转发给适配者。
    适配者(Adaptee):需要被适配的现有类,它的接口与目标接口不兼容。

    示例

    假设有一个现有的英国插座(Adaptee),但我们需要一个能够在欧洲使用的插座(Target Interface)。我们可以使用适配器模式来实现一个适配器,将英国插座转换为欧洲插座。

    1.定义目标接口

    首先,我们定义一个欧洲插座的接口:

    // Target Interface
    class EuropeanSocketInterface {
    public:
        virtual void power() = 0;
        virtual ~EuropeanSocketInterface() {}
    };
    

    2.实现适配者

    接下来,我们有一个英国插座(适配者),它有不同的接口:`

    // Adaptee (existing UK socket)
    class BritishSocket {
    public:
        void plugIn() {
            std::cout << "Plugged into British socket" << std::endl;
        }
    };
    

    3.实现适配器

    现在,我们创建一个适配器,使得英国插座可以符合欧洲插座的接口要求:

    // Adapter
    class SocketAdapter : public EuropeanSocketInterface {
    private:
        BritishSocket* adaptee;
    
    public:
        SocketAdapter(BritishSocket* adaptee) : adaptee(adaptee) {}
    
        void power() override {
            // Using adapter to call specific method of adaptee
            adaptee->plugIn();
        }
    };
    

    4.客户端代码

    最后,我们可以使用适配器模式在客户端代码中测试适配器:

    int main() {
        BritishSocket* britishSocket = new BritishSocket();
        EuropeanSocketInterface* adapter = new SocketAdapter(britishSocket);
    
        // Plug in using European standard
        adapter->power();
    
        delete britishSocket;
        delete adapter;
    
        return 0;
    }
    

    解释

    目标接口 EuropeanSocketInterface 定义了在欧洲使用的插座接口,其中 power() 方法是适配器需要实现的方法。

    适配者 BritishSocket 是现有的英国插座,它有自己的 plugIn() 方法,与目标接口不兼容。

    适配器 SocketAdapter 继承自 EuropeanSocketInterface,持有一个 BritishSocket 的实例,将 power() 方法委托给 BritishSocket 的 plugIn() 方法,从而实现了对欧洲插座接口的适配。

    客户端代码 创建了一个英国插座对象和适配器对象,然后使用适配器对象调用了EuropeanSocketInterface 的 power() 方法,实际上调用了 BritishSocket 的 plugIn() 方法。
    适配器模式使得不兼容的接口可以一起工作,提高了代码的复用性和灵活性。

  • 相关阅读:
    Android通过jni调用本地c/c++接口方法总结
    单点故障解决方案之Smart Link与Monitor Link
    Laravel 博客开发|管理后台里程碑管理
    NIO原理浅析(三)
    【App自动化测试】(一)Appium和移动端自动化
    都说自己是数据分析师,80%分析结果都是失败的,小心被裁了
    Android11去掉掉连接偏好里的【蓝牙】、【投射】、【通过蓝牙收到的文件】这三个菜单
    2021春招Java面试题大全(精华)
    半自动标注(使用自己的分割或检测模型推理完得到的矩阵再生成json文件)
    如何查找linux指令或者资料的说明
  • 原文地址:https://blog.csdn.net/congwang3960/article/details/139811921
  • 最新文章
  • 沪漂五周年了:我越来越迷茫了
    Agentic Skill Routing 实战:别再把所有 Skill 塞进 AI Agent 上下文
    MySQL-Seconds_behind_master的精度误差
    [MAF预定义ChatClient中间件-03]CachingChatClient——利用缓存省钱省时间
    AI的至暗历史:从万众期待到被政府撤资,AI的两次死亡徘徊
    Agent OS :五种驯服不确定性的范式
    PortSwigger SQL注入LAB11
    数据库即时编译JIT
    [Begin]AI Learn Data Day 0
    深度学习进阶(二十七)现代 LLM 的核心架构设计其二:SwiGLU
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
小工具 小游戏
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1

京公网安备 11010502049817号