工作中设计模式内容

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

工厂模式:

后期补充

单列模式:

后期补充

相关推荐
烂蜻蜓1 小时前
Flask入门教程(十二):表单处理——从基础到Flask-WTF完整实践
后端·python·flask
2601_962055978 小时前
跟据spring boot版本,查看对应的tomcat,并查看可支持的tomcat的版本范围
spring boot·后端·tomcat
EXI-小洲8 小时前
Java 操作 Word:字符串替换、图片插入、动态生成表格与API接口下载
java·开发语言·spring boot·word
2601_961901709 小时前
SpringBoot使用Nacos进行application.yml配置管理
java·spring boot·spring
Lost of 程序猿9 小时前
ASP.NET Core API 幂等性设计深度实战:从一次重复申领事故说起
后端·asp.net
何以解忧,唯有..10 小时前
LangChain 工具调用(Tool Calling)实战指南
java·前端·langchain
QQ_216962909610 小时前
【源码编号:project79475】SpringBoot校内二手交易平台:商品发布、分类检索、留言交流、订单管理全流程实战
java·spring boot·后端
前端 贾公子11 小时前
第09章:上下文与记忆 (2)
java·服务器·前端
2601_9622035111 小时前
Java进阶07集合(续)
java·开发语言
郑州光合科技余经理12 小时前
本地生活服务系统:模块边界与结算字段怎么拆
java·开发语言·前端·后端·系统架构·uni-app·php