• QT设计模式:适配器模式


    基本概念

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

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

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

    使用场景

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

    实现

    QT源码:信号与槽机制

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

    1. static QMetaObject::Connection connect(const QObject *sender, const char *signal,
    2. const QObject *receiver, const char *member, Qt::ConnectionType = Qt::AutoConnection);

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

    1. class Q_CORE_EXPORT QMetaObject::Connection {
    2. void *d_ptr; //QObjectPrivate::Connection*
    3. ......
    4. }
    5. //QObjectPrivate::Connection
    6. struct Connection : public ConnectionOrSignalVector
    7. {
    8. // 连接到此对象中插槽的连接的链表,下一个在基类中
    9. Connection **prev;
    10. // 连接到此对象中信号的连接的链接列表
    11. QAtomicPointer<Connection> nextConnectionList;
    12. Connection *prevConnectionList;
    13. //信号发送者
    14. QObject *sender;
    15. //信号接收者
    16. QAtomicPointer<QObject> receiver;
    17. ......
    18. };

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

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

    1. 源接口:任何 QObject 类的信号,用于触发某些操作。
    2. 适配器:QMetaObject::Connection ,里面定义了信号与槽的各种信息。

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

  • 相关阅读:
    SQL注入之order by注入与limit注入
    动态数组【python】
    锁降级 ReentrantReadWriteLock
    软件工程概论
    FPGA时序分析与约束(6)——综合的基础知识
    select、poll、epoll三种IO多路复用的区别
    初探富文本之React实时预览
    快来体验快速通道,netty中epoll传输协议详解
    gitlab安装和使用
    视频封面:从视频中提取封面,轻松制作吸引人的视频
  • 原文地址:https://blog.csdn.net/buhuiCyvyan/article/details/138519006