custed谁做的网站,如何建设网站内容,全国企业信用信息公示系统年报,昆明网站优化这种设计模式通常被称为 Pimpl#xff08;Pointer to Implementation#xff09;惯用法#xff0c;有时也被称为 Cheshire Cat 惯用法。它主要用于隐藏实现细节和减少编译依赖。
例子#xff1a;
DatabaseConnection.h
#ifndef DATABASE_CONNECTION_H
#define DATABASE_…这种设计模式通常被称为 PimplPointer to Implementation惯用法有时也被称为 Cheshire Cat 惯用法。它主要用于隐藏实现细节和减少编译依赖。
例子
DatabaseConnection.h
#ifndef DATABASE_CONNECTION_H
#define DATABASE_CONNECTION_H#include stringclass DatabaseConnection {
public:DatabaseConnection(const std::string connectionString);~DatabaseConnection();void connect();void disconnect();bool isConnected() const;private:class Impl; // 前向声明Impl* pImpl; // 指向实现类的指针
};#endif // DATABASE_CONNECTION_HDatabaseConnection.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 的接口。
这种模式特别适合需要频繁更改实现细节的类因为它可以在不影响接口的情况下进行更改。