工作中设计模式内容

PIMPL

它将类的实现细节与接口完全分离。

主要作用就是只给别人接口,告诉你怎么用的,但是不告诉你我类包含什么;

// 优点:

// - 减少编译时间(不需要包含成员的类型头文件等)

// - 更好的封装

// - ABI稳定性

PIMPL 把真正的数据成员放到一个不公开的实现类Impl*)中,头文件里只放一个前置声明的指针。指针的大小永远不变(8字节),所以:

  • 类的 ABI 稳定:即使 Impl 内部加了再多成员,Impl* 本身的大小和偏移不变。

  • 客户端无需重新编译,只要重新链接或直接替换动态库即可

// 缺点:

// - 额外的堆分配(性能开销)

// - 间接访问(可能影响缓存局部性)

// - 代码复杂性增加

cpp 复制代码
// 传统类 - 实现暴露在头文件中
class Widget {
public:
    Widget();
    void doSomething();
    
private:
    int data;
    std::string name;
    std::vector<double> values;  // 用户能看到所有私有成员
};
 
// PIMPL版本 - 实现完全隐藏
class Widget {
public:
    Widget();
    ~Widget();
    void doSomething();
    
private:
    class Impl;                    // 前向声明
    std::unique_ptr<Impl> pImpl;  // 指向隐藏的实现
};
 
// widget.cpp
class Widget::Impl {
    int data;
    std::string name;
    std::vector<double> values;  // 实现细节仅在.cpp文件中可见
    
    void doSomethingImpl() {
        // 实际实现
    }
};

工厂模式:

后期补充

单列模式:

后期补充

相关推荐
亦暖筑序5 分钟前
Java 8老系统AI Workflow实战:把一次性AI对话升级成可恢复工作流
java·后端
血小溅7 分钟前
飞书 CLI 集成基础教程
后端
ihgry18 分钟前
SpringBoot+Redis限流
后端
晚安code20 分钟前
Nacos 注解全解析:7 个核心注解 + 5 个生产踩坑清单(2026 实测)
后端
wei_shuo21 分钟前
KES 备份恢复与数据灾备实战:物理备份、逻辑备份与PITR完全指南
后端
Ai拆代码的曹操22 分钟前
Netty 堆外内存泄漏从 0 到 1 排查实录:RES 1.2G 堆只有 256M
后端
敲代码的彭于晏1 小时前
Bean 生命周期完全图解:前端同学也能看懂的 Spring 核心机制
java·前端·后端
IT_陈寒1 小时前
Redis内存飙升的锅,原来是我没搞懂这个过期策略
前端·人工智能·后端
铁皮饭盒2 小时前
26年bunjs, elysia+pg一把梭, redis都省了
前端·javascript·后端
plainGeekDev2 小时前
ButterKnife → ViewBinding
android·java·kotlin