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

相关推荐
iqay1 小时前
【C语言】填空题/程序填空题1
c语言·开发语言·数据结构·c++·算法·c#
程序猿编码1 小时前
自定义命令执行器:C++中命令封装的深度探索(C/C++实现)
linux·c语言·c++·网络安全·shell·命令行
字节全栈_kYu1 小时前
微信小程序视频点播在线视频学习系统 毕业设计 课程设计(1)首页_微信小程序视频功能设计流程图
学习·微信小程序·课程设计
想拿高薪的韭菜1 小时前
人工智能第2章-知识点与学习笔记
人工智能·笔记·学习
新生派2 小时前
海外问卷调查渠道查,如何影响企业的运营
经验分享
Future_yzx2 小时前
Java Web的发展史与SpringMVC入门学习(SpringMVC框架入门案例)
java·前端·学习
Future_yzx2 小时前
Spring MVC学习——发送请求(@RequestMapping注解及请求参数绑定)
学习·spring·mvc
star010-2 小时前
【视频+图文详解】HTML基础4-html标签的基本使用
前端·windows·经验分享·网络安全·html·html5
wen__xvn2 小时前
每日一题洛谷B3865 [GESP202309 二级] 小杨的 X 字矩阵c++
c++·算法·矩阵
makabaka_T_T2 小时前
25寒假算法刷题 | Day1 | LeetCode 240. 搜索二维矩阵 II,148. 排序链表
数据结构·c++·算法·leetcode·链表·矩阵