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 类的成员函数,用于响应信号。

相关推荐
加油,旭杏22 分钟前
【中间件学习】fastCG介绍和使用
学习·nginx·fastcgi
Death20024 分钟前
Qt 6 相比 Qt 5 的主要提升与更新
开发语言·c++·qt·交互·数据可视化
机器视觉知识推荐、就业指导27 分钟前
使用Qt实现实时数据动态绘制的折线图示例
开发语言·qt
limengshi13839228 分钟前
通信工程学习:什么是TFTP简单文件传输协议
网络·网络协议·学习·信息与通信
GFCGUO1 小时前
ubuntu18.04运行OpenPCDet出现的问题
linux·python·学习·ubuntu·conda·pip
麻辣韭菜2 小时前
网络基础 【HTTP】
网络·c++·http
丝丝不是土豆丝2 小时前
学习 CSS 新的属性 conic-gradient 实现环形进度条
学习
阿史大杯茶3 小时前
Codeforces Round 976 (Div. 2 ABCDE题)视频讲解
数据结构·c++·算法
S hh3 小时前
【Linux】进程地址空间
java·linux·运维·服务器·学习
转调3 小时前
每日一练:地下城游戏
开发语言·c++·算法·leetcode