【Qt】Qt源码中涉及到的设计模式

1、单例模式

qApp宏返回指向QApplication的单例

#define qApp (static_cast<QApplication *>(QCoreApplication::instance()))
2、MVC模型视图控制器框架

模型是应用程序对象、视图是它的屏幕显示、控制器定义了用户界面对用户输入的反应。
Qt的模型视图框架是经典的MVC模型,可以参考QListWidget、QTableWidget、QTreeWidget的源码。

3、反射模式

反射就是指对象成员的自我说明。
Qt元对象模式就是反射模式。QObject拥有QMetaObject、QMetaProperty类就能实现反射模式。

4、命令模式

命令模式:把操作封装成具有公共执行接口的对象。这样就可以把操作放到一个队列中,可以实现取消已经执行的操作。
Qt中QUndoCommand、QRunnable、QAction可以看成是设计模式。

5、MonoState模式

MonoState模式和单例模式相似也是一种保证单一性的模式。单例模式是通过将默认构造函数声明为private限制客户端程序对类的直接new创建实例化,并使用static(类属)的方式来保证类的对象单一,而MonoState模式却是将它的构造函数声明为public,而将类中所有的字段声明为static。换句话说,MonoState并不限制创建对象的个数,但是它的状态却只有一个状态。
Qt中QSetting就是MonoState模式的一种实现。QSetting常用于保存和恢复程序状态。

6、观察者模式

观察者模式(又被称为发布-订阅(Publish/Subscribe)模式,属于行为型模式的一种,它定义了一种一对多的依赖关系,让多个观察者对象同时监听某一个主题对象。这个主题对象在状态变化时,会通知所有的观察者对象,使他们能够自动更新自己。
Qt中事件循环、信号和槽、视图模型都可以视为观察者模式。其实事件循环是真正的观察者模式,信号和槽由事件实现、视图模型由信号和槽实现。

7、组合模式

Qt中由QObject实现的父子类就是组合模式。

8、享元模式

享元模式(Flyweight Pattern)为了避免对同一个对象的多个副本进行存储,使用一个轻量级的类对其进行封装,指向共享的数据,这种类的实现方法就是享元模式。
Qt支持隐式共享、写时复制就是享元模式

发布了324 篇原创文章 · 获赞 266 · 访问量 42万+

猜你喜欢

转载自blog.csdn.net/u010168781/article/details/104743138