C++设计模式:八股文

发布于:2025-06-15 ⋅ 阅读:(11) ⋅ 点赞:(0)
一.设计模式有哪些,和应用在哪里
1. 单例模式在C++中如何实现?如何保证多线程安全?

单例模式可通过静态局部变量、饿汉式静态成员、懒汉式加锁等方式实现。C++11后,局部静态变量初始化是线程安全的。

 2. 单例模式有哪些常见实现方式?各自优缺点是什么?

饿汉式:类加载时即创建实例,线程安全,启动慢,资源浪费。

懒汉式:首次访问时创建实例,节省资源,需加锁保证线程安全。

局部静态变量(C++11):线程安全,推荐。

Meyers单例:局部静态变量实现,简洁高效。

禁止拷贝和赋值,防止多实例。

 3. 什么是工厂模式?C++中如何实现工厂方法和抽象工厂?

工厂模式用于对象创建解耦。

工厂方法:基类工厂定义接口,子类实现具体产品创建。

抽象工厂:创建一组相关产品。
C++实现:用抽象基类+虚函数+多态。

 4.工厂模式的应用场景有哪些?与简单工厂相比有何优缺点?

应用于插件系统、数据库驱动、跨平台UI等。
工厂方法优点:符合开闭原则,易扩展。
简单工厂缺点:增加新产品需修改工厂代码,违背开闭原则

5.什么是策略模式?C++中如何实现?应用场景有哪些? 

策略模式将算法封装为独立类,运行时可互换。C++用抽象基类+多态实现。
应用:排序算法、日志策略、AI决策等。

6.什么是代理模式?C++中有哪些实现方式?应用场景有哪些? 

代理模式为目标对象提供代理对象,控制访问。C++可用继承、组合、模板、智能指针实现。
应用:智能指针(如std::shared_ptr)、远程代理、权限控制、缓存。

7.什么是观察者模式?C++中如何实现?有哪些实际应用? 

观察者模式定义一对多依赖,一个对象状态变化时通知所有依赖对象。C++用抽象基类+回调函数/事件实现。
应用:事件系统、GUI、模型-视图同步、信号槽(Qt)。

8.什么是责任链模式?C++中如何实现?应用场景有哪些? 

责任链模式将请求沿链传递,直到有对象处理它。C++用指针链表、抽象基类实现。
应用:日志处理、审批流、事件分发、拦截器。

9. 什么是装饰器模式?C++中如何实现?与继承有何区别? 

装饰器模式动态为对象添加功能。C++用抽象基类+组合实现。
区别:装饰器通过组合扩展功能,继承通过子类扩展,装饰器更灵活。
应用:IO流、日志增强、权限校验。

10.什么是组合模式?C++中如何实现?适合哪些结构? 

组合模式将对象组合成树形结构,统一对待单个和组合对象。C++用抽象基类+容器(如std::vector)实现。
适合文件系统、菜单树、UI组件树等。

 二.设计模式有哪些原则
1.什么是迪米特原则?在C++开发中如何体现?

迪米特原则(最少知识原则)要求对象只与直接朋友通信,减少类间耦合。C++中可通过封装、私有成员、接口隔离、组合优于继承等方式体现。

2.什么是里氏替换原则?如何在C++继承体系中保证该原则? 

子类对象必须能替换父类对象且功能不变。C++中需保证子类不重写父类已有功能、不改变父类语义、不抛出异常。可用虚函数、接口继承、避免多重继承等。

3.什么是依赖倒置原则?C++中如何实现依赖倒置? 

高层模块不依赖底层模块,二者都依赖抽象。C++中可用抽象基类、接口、模板参数、依赖注入(构造函数注入、Setter注入)等实现。

 


网站公告

今日签到

点亮在社区的每一天
去签到