工作中设计模式内容

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() {
        // 实际实现
    }
};

工厂模式:

后期补充

单列模式:

后期补充

相关推荐
wuminyu37 分钟前
Java锁机制之park与futex系统级协同机制解析
java·linux·c语言·jvm·c++
疯狂打码的少年39 分钟前
编译程序与解释程序的区别
java·开发语言·笔记
xieliyu.8 小时前
Java算法精讲:双指针(三)
java·开发语言·算法
星辰徐哥8 小时前
Spring Boot 微服务架构设计与实现
spring boot·后端·微服务
星辰徐哥8 小时前
Spring Boot 数据导入导出与报表生成
spring boot·后端·ui
明夜之约8 小时前
Spring Boot 自动装配源码
java·spring boot·后端
Leaton Lee8 小时前
Spring Boot分层架构详解:从Controller到Service再到Mapper的完整流程
java·spring boot·后端·架构
Micro麦可乐8 小时前
Spring Boot 实战:从零设计一个短链系统(含完整代码与数据库设计)
数据库·spring boot·后端·哈希算法·雪花算法·短链系统
Jinkxs8 小时前
Resilience4j- 与 Spring Boot 快速集成:自动配置与基础注解使用
java·spring boot·后端
毕设源码_郑学姐8 小时前
计算机毕业设计springboot网络相册设计与实现 基于Spring Boot框架的在线相册管理系统开发与应用 Spring Boot驱动的网络影集设计与实践
spring boot·后端·课程设计