工作中设计模式内容

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

工厂模式:

后期补充

单列模式:

后期补充

相关推荐
alexlifexyz6 小时前
写了个 Claude Code 插件:AI 写的 Java 违反阿里规约,就写不进文件
java
轻舟技术A6 小时前
Pi 的 Rust 实现来了:rpi,不止一个终端 Agent
开发语言·后端·rust
站大爷IP6 小时前
Python的字典遍历把我坑惨了,原来items和keys的区别这么大
后端
威哥爱编程6 小时前
【AI全栈12-01】Spring Boot 为何是 AI 全栈后端优选
java·spring boot·后端
汉堡大王95276 小时前
GPT-6 上线 48 小时,我扒开了 Intelligent UI 的运行机制:DIL、沙箱 Worker 和一个 React 式协调器
前端·javascript·后端
用户EasyAdminBlazor6 小时前
EasyAdminBlazor 实战:从 Entity 到完整 Admin Blazor 后台详解
后端
Bazingga6 小时前
AgentScope 到底是用来做什么的?一篇笔记说清楚
后端
威哥爱编程6 小时前
【AI全栈12-03】Spring Boot 用多模型路由把智能客服成本降下来
java·spring boot·后端
威哥爱编程6 小时前
【AI全栈12-02】Spring Boot 跑通第一个 AI 对话接口:HR 政策问答机器人实战
java·spring boot·后端