尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

C++笔记之单例模式、工厂模式、观察者模式的适用场景是什么?

C++笔记之单例模式、工厂模式、观察者模式的适用场景是什么? C++笔记之单例模式、工厂模式、观察者模式的适用场景是什么?code review!单例模式:系统中某个类只能有一个实例,且该实例需要被全局访问的场景。比如全局状态管理类、配置管理器、日志系统。工厂模式:工厂模式适用于创建对象的过程比较复杂,或者需要根据不同条件创建不同类型的对象,并且希望将对象的创建与使用解耦的场景。另外简单工厂模式违反了开闭原则。但使用静态注册表可以解决这个问题。观察者模式:观察者模式适用于一个对象状态改变时,需要通知一系列依赖该状态的对象,从而实现发布-订阅、事件驱动的场景。比如天气变化,超市涨价推送通知给用户。Qt的信号与槽、ROS的发布-订阅者机制就是在一定程度上应用了观察者的思想。文章目录C++笔记之单例模式、工厂模式、观察者模式的适用场景是什么?1. 三种设计模式的适用场景1.1 单例模式适用于什么场景?1.2 工厂模式适用于什么场景?1.2.1 简单工厂模式适用于什么情况?1.2.2 工厂方法模式适用于什么情况?1.2.3 抽象工厂模式适用于什么情况?1.3 观察者模式适用于什么场景?1.4 三种模式如何对比?2. 观察者模式的典型应用场景有没有天气变化、超市涨价、Qt信号与槽?3. 观察者模式就是发布者和订阅者吗?3.1 观察者模式的核心概念是什么?3.2 观察者模式和发布-订阅模式有什么区别?4. ROS和Qt的信号与槽机制都是观察者模式吗?4.1 Qt信号与槽属于哪一类?4.2 ROS的Topic机制属于哪一类?4.3 两者的关键差异是什么?4.4 如何一句话区分?1. 三种设计模式的适用场景1.1 单例模式适用于什么场景?单例模式适用于系统中某个类只能有一个实例,且该实例需要被全局访问的场景。典型应用包括:全局状态管理类:系统需要唯一的状态持有者,避免多处各自维护一份状态导致不一致。配置管理器:系统配置全局唯一,多处读取,同时避免重复加载。日志系统:整个程序共享一个日志记录器,避免日志文件被多次打开。线程池或连接池管理:资源池需要全局统一管理,防止创建多个池造成资源浪费。硬件资源访问:例如打印机、显卡等独占资源的管理类。1.2 工厂模式适用于什么场景?工厂模式适用于创建对象的过程比较复杂,或者需要根据不同条件创建不同类型的对象,并且希望将对象的创建与使用解耦的场景。1.2.1 简单工厂模式适用于什么情况?适用于产品种类较少且相对固定,根据参数创建对应对象的情况。例如根据文件后缀创建不同的解析器,如 JsonParser、XmlParser。1.2.2 工厂方法模式适用于什么情况?适用于产品族会扩展,希望遵循开闭原则,新增产品时不修改已有代码的情况。例如日志系统支持文件日志、网络日志、控制台日志,每种日志对应一个具体工厂。1.2.3 抽象工厂模式适用
返回列表