同事们,一个关于接口、依赖倒置、创建类实例的问题。假设有一个“客户端”(main.cpp)需要一些数据。客户并不关心他如何接收它们:从内存,从文件,通过网络......他只使用界面,即
数据存储.hpp
struct Data
{
int a = 0;
int b = 0;
int c = 0;
};
// интерфейс
class DataStorage
{
public:
virtual ~DataStorage() {};
virtual Data getData() = 0;
};
主程序
#include <iostream>
#include "dataStorage.hpp"
using namespace std;
int main()
{
DataStorage* dataStorage;
Data data = dataStorage->getData();
cout << "a = " << data.a << '\t' << "b = " << data.b << '\t' << "c = " << data.c << '\n';
return 0;
}
接口实现:
数据存储Imp.hpp
class DataFromMemory: public DataStorage
{
public:
DataFromMemory();
Data getData() override;
};
class DataFromFile: public DataStorage
{
public:
DataFromFile();
Data getData() override;
};
数据存储Imp.cpp
#include "dataStorageImp.hpp"
DataFromMemory::DataFromMemory() {};
Data DataFromMemory::getData()
{
Data data;
data.a = 1;
data.b = 2;
data.c = 3;
return data;
}
DataFromFile::DataFromFile() {};
Data DataFromFile::getData()
{
Data data;
data.a = 10;
data.b = 20;
data.c = 30;
return data;
}
代码不起作用,就像一片空白。事实上,问题是我应该如何以及在哪里创建实现类的实例DataFromMemory和DataFomFile?可以通过条件if "fromFile": {}or进行选择if "from_memory": {},或者使用宏#define USE_MEMORYor进行选择USE_FILE。不重要。
我做了以下实现。C++ 和 SOLID 专家请发表评论。
“主.cpp”
“创建者.hpp”
“数据存储.hpp”
“数据存储Imp.hpp”
再次强调,客户端 (main.cpp) 只通过接口接收数据,无论数据来源如何。这个问题纯粹是理论上的,需要您自己了解如何做到这一点。