工作中设计模式内容

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

工厂模式:

后期补充

单列模式:

后期补充

相关推荐
高林雨露2 小时前
Java开发转kotlin
java·kotlin
Wenzar_2 小时前
# 发散创新:SwiftUI 中状态管理的深度实践与重构艺术 在 SwiftUI 的世界里,**状态驱动 UI 是核心哲学**。但随
java·python·ui·重构·swiftui
不败公爵2 小时前
finsh_thread_entry这个线程是自动启动的
java·linux·服务器
Seven972 小时前
Tomcat的事件监听机制:观察者模式
java
YaBingSec2 小时前
玄机靶场-第三届-长城杯-初赛-SnakeBackdoor WP
java·运维·笔记·tomcat·ssh
北冥有羽Victoria2 小时前
Django Auth组件完整版教程:从原理到项目落地
大数据·服务器·数据库·后端·python·django·sqlite
ZKNOW甄知科技2 小时前
燕千云ITR深度解析:大型企业如何建立服务价值流?
运维·人工智能·后端·科技·安全·自动化·用户运营
IT利刃出鞘2 小时前
Spring工具类--AnnotationUtils的使用
java·spring
我喜欢山,也喜欢海3 小时前
Java和go在并发上的表现为什么不一样
java·python·golang