当前位置: 首页 > news >正文

设计模式: Pimpl(Pointer to Implementation)

这种设计模式通常被称为 Pimpl(Pointer to Implementation)惯用法,有时也被称为 Cheshire Cat 惯用法。它主要用于隐藏实现细节和减少编译依赖。

例子:

DatabaseConnection.h
#ifndef DATABASE_CONNECTION_H
#define DATABASE_CONNECTION_H#include <string>class DatabaseConnection {
public:DatabaseConnection(const std::string& connectionString);~DatabaseConnection();void connect();void disconnect();bool isConnected() const;private:class Impl; // 前向声明Impl* pImpl; // 指向实现类的指针
};#endif // DATABASE_CONNECTION_H

 DatabaseConnection.cpp

#include "DatabaseConnection.h"
#include <iostream>// 实现类
class DatabaseConnection::Impl {
public:Impl(const std::string& connStr) : connectionString(connStr), connected(false) {}void connect() {// 模拟连接数据库std::cout << "Connecting to database with connection string: " << connectionString << std::endl;connected = true;}void disconnect() {// 模拟断开数据库连接std::cout << "Disconnecting from database." << std::endl;connected = false;}bool isConnected() const {return connected;}private:std::string connectionString;bool connected;
};// DatabaseConnection类的实现
DatabaseConnection::DatabaseConnection(const std::string& connectionString): pImpl(new Impl(connectionString)) {}DatabaseConnection::~DatabaseConnection() {delete pImpl;
}void DatabaseConnection::connect() {pImpl->connect();
}void DatabaseConnection::disconnect() {pImpl->disconnect();
}bool DatabaseConnection::isConnected() const {return pImpl->isConnected();
}

这个例子的要点:

  • 信息隐藏DatabaseConnection 的用户不需要知道连接是如何实现的,只需要知道如何使用接口。
  • 减少编译依赖Impl 类的定义在源文件中,头文件中只需要前向声明。
  • 灵活性:如果需要更改连接的实现(例如,切换到不同的数据库库),只需修改 Impl 类,而不影响 DatabaseConnection 的接口。

这种模式特别适合需要频繁更改实现细节的类,因为它可以在不影响接口的情况下进行更改。

http://www.lryc.cn/news/468867.html

相关文章:

  • android开发中文网站 android developer
  • 实习冲刺Day1
  • 安全见闻(5)——开阔眼界,不做井底之蛙
  • Navicat 安装
  • 解读 Java 经典巨著《Effective Java》90条编程法则,第2条:遇到多个构造器参数时要考虑使用构建器
  • 拉丁美洲有望成为全球电商的新蓝海!
  • VScode远程开发之remote 远程开发(二)
  • 基于Python+SQL Server2008实现(GUI)快递管理系统
  • png格式图片怎么改成jpg?超好用的8种转换方法介绍!
  • Idea基于JRbel实现项目热部署修改Java、Xml文件无需重启项目
  • 【如何获取股票数据17】Python、Java等多种主流语言实例演示获取股票行情api接口之沪深A股近年增发数据获取实例演示及接口API说明文档
  • 导出BERT句子模型为ONNX并推理
  • Unity Apple Vision Pro 自定义手势识别交互
  • 【Javaee】网络原理—TCP协议的核心机制
  • Unity插件-Intense TPS 讲解
  • 【p2p、分布式,区块链笔记 Blockchain】truffle001 以太坊开发框架truffle初步实践
  • 网站被浏览器提示“不安全”,如何快速解决
  • java -jar启动 报错: Error: Unable to access jarfile
  • Servlet(三)-------Cookie和session
  • 最新物流行业CRM系统应用数字化解决方案
  • [deadlock]死锁导致的设备登录无响应问题
  • 2024年10月21日计算机网络,乌蒙第一部分
  • ESlint代码规范
  • 【Vue.js设计与实现】第三篇第11章:渲染器-快速 Diff 算法-阅读笔记
  • 材质变体 PSO学习笔记
  • 2024年【烟花爆竹储存】考试及烟花爆竹储存复审模拟考试
  • 文件夹操作
  • 如何制作一台自己想要的无人机?无人机改装调试技术详解
  • Linux -- 进程间通信、初识匿名管道
  • 网站的SSL证书快到期了怎么办?怎么续签?