常见的 C++ Qt 设计模式及其应用场景举例:
1. 单例模式(Singleton):用于确保一个类只有一个实例,例如应用程序的配置信息类。
2. 工厂模式(Factory):用于创建对象,例如界面控件的创建。
(相关资料图)
3. 建造者模式(Builder):用于分步创建复杂对象,例如创建和初始化带有多个属性的对象。
4. 原型模式(Prototype):用于复制对象,例如复制界面控件。
5. 适配器模式(Adapter):用于将一个类的接口转换成另一个类的接口,例如将第三方库的接口转换成 Qt 的接口。
6. 桥接模式(Bridge):用于将抽象部分与它的实现部分分离开来,例如将数据模型与视图分离。
7. 组合模式(Composite):用于将对象组合成树形结构,例如菜单项的组合。
8. 装饰模式(Decorator):用于动态地给一个对象添加新的功能,例如添加界面控件的样式。
9. 外观模式(Facade):用于简化一组类的接口,例如对外提供易用的高层接口。
10. 享元模式(Flyweight):用于共享细粒度对象,例如共享图片资源。
11. 代理模式(Proxy):用于为其他对象提供一种代理以控制对这个对象的访问,例如网络请求的代理。
12. 观察者模式(Observer):用于对象间的一对多的依赖关系,当一个对象状态改变时,所有依赖它的对象都会得到通知,例如数据模型与视图的关系。
13. 命令模式(Command):用于将请求封装成对象,以便使用不同的请求、队列或日志来参数化其他对象,例如界面控件的命令。
14. 职责链模式(Chain of Responsibility):用于将请求的发送者和接收者解耦,例如事件的处理。
15. 策略模式(Strategy):用于定义一系列算法,将它们封装起来,使它们可以相互替换,例如排序算法。
16. 模板方法模式(Template Method):用于定义一个算法骨架,将一些步骤延迟到子类中,例如界面控件的绘制。
17. 迭代器模式(Iterator):用于提供一种方法顺序访问一个聚合对象中的各个元素,例如 QList、QVector 等容器类。
18. 访问者模式(Visitor):用于在不改变数据结构的前提下,增加对数据的操作,例如对数据模型的扩展。
19. 备忘录模式(Memento):用于在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态,例如文本编辑器的撤销和恢复操作。
20. 中介者模式(Mediator):用于减少对象间的直接依赖关系,使其更松散,例如界面控件之间的通信。
21. 解释器模式(Interpreter):用于给定一个语言,定义它的文法的一种表示,并定义一个解释器,该解释器使用该表示来解释语言中的句子,例如正则表达式的解析。
22. 委托模式(Delegation):用于一个对象调用另一个对象的方法,同时隐藏另一个对象的实现细节,例如界面控件的事件处理。
23. 状态模式(State):用于封装对象的状态,使得对象状态的变化和行为的变化相互独立,例如文本编辑器的编辑状态。
24. 拦截过滤器模式(Intercepting Filter):用于拦截请求,对请求进行处理,然后将请求传递给下一个过滤器,例如网络请求的拦截和过滤。
25. 门面模式(Facade):用于为子系统中的一组接口提供一个一致的界面,例如对外提供易用的高层接口。
26. 仲裁者模式(Mediator):用于减少对象间的直接依赖关系,使其更松散,例如界面控件之间的通信。
27. 注册模式(Registry):用于在运行时创建对象并注册到某个列表中,例如插件的注册和管理。
28. 模型-视图-控制器模式(Model-View-Controller):用于分离应用程序的数据模型、用户界面和控制逻辑,例如 Qt 中的 MVC 框架。
29. 依赖注入模式(Dependency Injection):用于将依赖对象的创建和解决过程交给容器来管理,例如使用 Qt 的依赖注入框架 QDependencyInjector。
30. 享元模式(Flyweight):用于共享细粒度对象,例如共享图片资源。