gpt4 book ai didi

c++ - 交换接口(interface)的实现

转载 作者:行者123 更新时间:2023-11-30 02:32:52 25 4
gpt4 key购买 nike

我已经在 Google 和 Stackoverflow 上搜索过关于这个问题的讨论; “实现交换”、“替换实现”等没有给我任何结果。

假设我们有一个接口(interface) DB ,我当前的实现是 Postgresql .现在,我想将实现换成 MySQL .这样做的合适方法是什么?我自己有几个想法:

  1. DB.hDB.cpp ,包含 Postgresql 实现的 cpp 文件。现在,只需重命名 DB.cppDB.cpp.postgresql和 MySQL 实现 DB.cpp .
  2. Postgresql.h / Postgresql.cppMySQL.h / MySQL.cpp , 改变实际的 #include<>陈述。这似乎是错误的;数百个文件都可以使用它,因此这会导致大量看似不必要的工作。
  3. 实现 IoC 容器并从那里解析数据库驱动程序/连接器。

这三个中的任何一个都是正确的,还是我们有另一种通用的方法来实现这一点?

最佳答案

(警告,前方未编译代码)

DB.h

#include <string>
class DB
{
public:
virtual bool insert(std::string content) = 0;
// And whatever other functions your DB interface may need ...
}

MySQL.h

#include <DB.h>
class MySQL : public DB
{
public
virtual bool insert(std::string content);
}

MySQL.cpp

#include <MySQL.h>
bool MySQL::insert(std::string content)
{
// insert logic here
return true;
}

same for PostgreSQL.

createDB.cpp

#include <memory>
#include <MySQL.h>
#include <PostgreSQL.h>

enum class DBType { MySQL, PostgreSQL };
std::unique_ptr<DB> createDB(DBType type)
{
switch(type)
{
case DBType::MySQL:
return std::unique_ptr<DB>{std::make_unique<MySQL(/*constructor arguments here*/)};
case DBType::PostgreSQL:
return std::unique_ptr<DB>{std::make_unique<PostgreSQL>(/*constructor arguments here*/)};
}
}

如果我没记错的话,这也被称为工厂模式。

关于c++ - 交换接口(interface)的实现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35935602/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com