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

相关推荐
心怀梦想的咸鱼5 分钟前
UE5 第一人称射击项目学习(四)
学习·ue5
AI完全体8 分钟前
【AI日记】24.11.22 学习谷歌数据分析初级课程-第2/3课
学习·数据分析
工业3D_大熊10 分钟前
3D可视化引擎HOOPS Luminate场景图详解:形状的创建、销毁与管理
java·c++·3d·docker·c#·制造·数据可视化
暮色_年华24 分钟前
Modern Effective C++ Item 11:优先考虑使用deleted函数而非使用未定义的私有声明
c++
流星白龙26 分钟前
【C++习题】10.反转字符串中的单词 lll
开发语言·c++
小白不太白95038 分钟前
设计模式之 模板方法模式
java·设计模式·模板方法模式
Mephisto.java43 分钟前
【大数据学习 | Spark-Core】Spark提交及运行流程
大数据·学习·spark
Smile丶凉轩1 小时前
微服务即时通讯系统的实现(服务端)----(1)
c++·git·微服务·github
售后宝1 小时前
服务机器人三甲坎德拉:用智能化开启售后服务新篇章
经验分享·制造
色空大师1 小时前
23种设计模式
java·开发语言·设计模式