QT设计模式:适配器模式

基本概念

适配器模式(Adapter Pattern)是一种结构型设计模式,允许将一个类的接口转换成客户端所期望的另一个接口,可以让原本由于接口不兼容而不能一起工作的类能够一起工作。

适配器模式需要实现的部分为:

  • Target类:定义客户端使用的接口。
  • Adaptee类:需要被适配的类,它已经存在但接口与Target类不兼容。
  • Adapter类:适配器类,通过实现Target接口并持有一个Adaptee对象来对其进行适配。

使用场景

  • 当需要将一个类与另一个不兼容的接口进行协同工作时。
  • 当需要重用某个类,但其接口与所要求的不匹配时。
  • 当需要一个类去实现多个接口时。

实现

QT源码:信号与槽机制

我们都知道信号与槽机制可以连接两个参数并不完全相同,也就是接口不兼容的两个类中的函数。以下是connect函数的实现:

复制代码
    static QMetaObject::Connection connect(const QObject *sender, const char *signal,
                        const QObject *receiver, const char *member, Qt::ConnectionType = Qt::AutoConnection);

可以看到这里返回了一个静态的 QMetaObject::Connection 对象,查看定义:

复制代码
class Q_CORE_EXPORT QMetaObject::Connection {
    void *d_ptr; //QObjectPrivate::Connection*
    ......
}


//QObjectPrivate::Connection
    struct Connection : public ConnectionOrSignalVector
    {
        // 连接到此对象中插槽的连接的链表,下一个在基类中
        Connection **prev;
        // 连接到此对象中信号的连接的链接列表
        QAtomicPointer<Connection> nextConnectionList;
        Connection *prevConnectionList;
        //信号发送者
        QObject *sender;
        //信号接收者
        QAtomicPointer<QObject> receiver;
        ......
    };

可以看出 QMetaObject::Connection 里面有一个d指针指向 QObjectPrivate::Connection,而QObjectPrivate::Connection 里定义了信号与槽的各种信息,也就是作为适配器

总结一下,在信号与槽中:

  1. 源接口:任何 QObject 类的信号,用于触发某些操作。

  2. 适配器:QMetaObject::Connection ,里面定义了信号与槽的各种信息。

  3. 目标接口:一个槽函数或者是一个 QObject 类的成员函数,用于响应信号。

相关推荐
Zixhy11 分钟前
Boost 库实现异步高并发服务器
linux·服务器·c++
人工智能培训26 分钟前
从“捏泥人”到“造世界”:3D生成式AI的技术跃迁与产业落地
大数据·人工智能·学习·生活·ai写作
鱼很腾apoc28 分钟前
【Linux】第15期 讲解IP网络层核心原理与机制
linux·服务器·网络协议·学习·tcp/ip·ip·网络层
AbandonForce29 分钟前
简谈线程池
开发语言·c++·算法
CV山月44 分钟前
《DPO 算法详解:不训练奖励模型,如何让大模型直接学会人类偏好?》
人工智能·经验分享·python·大模型·强化学习·研究生
Mr_liu_6661 小时前
ns3-gym例子解析_基础例子与wifi例子_DQN(3)
开发语言·c++·python·dqn·ns3
陈年老古董1 小时前
Python模拟MapReduce分治思想 | 从单文件统计到大文件拆分聚合 学习笔记
开发语言·hadoop·笔记·python·学习
佳児素花痴╮1 小时前
C++速通2
开发语言·c++·算法
FLJwu1 小时前
镜头模组与画质量产实战 02:运动相机镜头组装工艺、胶水选型、温变跑焦与参数虚标|20 年源头工厂量产经验
经验分享·数码相机·产品运营·相机
似水এ᭄往昔1 小时前
【Qt】--常用控件(输入类控件)
开发语言·qt