6月1日 09:46

C++ 常用设计模式怎么实现?单例/工厂/观察者/策略

C++ 设计模式面试常考的是单例、工厂、观察者和策略这四个。单例用 Meyer's Singleton(局部静态变量),线程安全且简洁。工厂模式分简单工厂和抽象工厂,核心是用虚函数延迟到子类决定创建哪种对象。观察者模式在事件系统中到处都是,注意生命周期管理。策略模式用组合替代继承,运行时切换算法。

追问

单例模式的线程安全怎么保证?

Meyer's Singleton(函数内 static 局部变量)C++11 起保证线程安全,编译器自动加锁。不要用双重检查锁定(DCLP),早期 C++ 下有指令重排问题,现代 C++ 直接用 static 就行。

抽象工厂和简单工厂有什么区别?

简单工厂一个类通过参数决定创建哪种产品,违反开闭原则。抽象工厂定义接口,每个子类创建一族产品,新增产品族加子类即可,但新增产品类型要改所有工厂。

观察者模式有什么坑?

观察者持有主题的引用或指针,主题析构时观察者可能收到通知访问野指针。解注册要在观察者析构时做,推荐用 weak_ptr 打破循环引用。

策略模式和模板方法模式怎么选?

策略是组合,运行时通过指针/引用切换算法,灵活但有虚函数开销。模板方法是继承,编译期确定算法骨架,子类只重写部分步骤。需要运行时切换用策略,算法骨架固定用模板方法。

标签:C++