gpt4 book ai didi

c++ - 在定义一个条件后总是使用一个类

转载 作者:太空狗 更新时间:2023-10-29 19:53:24 24 4
gpt4 key购买 nike

我有两个类,一个完成从数据库(已经实现)获取数据的所有工作,另一个从文件(现在正在实现)获取数据。这里的事情是我希望能够切换流(数据库或文件)。检查是数据库还是文件的过程只需要一次。因此,对于类中的每个方法,我不想每次都检查调用此方法时应该使用什么。现在,我做如下:

if(IsDataBaseStream())
Database::execQuery("SELECT * from table");
else //is FileStream
File::GetAllFrom("Table");

这很丑。我拒绝这样做。我考虑过回调,但这在不同的类之间不起作用。

有没有办法不那样浪费处理器的工作?

提前致谢

最佳答案

你应该使用 Strategy Design Pattern .为两个类提供一个公共(public)基类和一个获取数据的抽象方法,创建一个指向该基类的指针,然后在一次检查后为该指针分配一个基于文件或基于数据库的实现。

struct BaseStream {
virtual void process();
};
struct FileStream : public BaseStream {
virtual void process() {
File::GetAllFrom("Table");
}
};
struct DBStream : public BaseStream {
virtual void process() {
Database::execQuery("SELECT * from table");
}
};
...
BaseStream *s;
if (IsDataBaseStream()) {
s = new DBStream;
} else {
s = new FileStream;
}
...
s -> process();

关于c++ - 在定义一个条件后总是使用一个类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14266550/

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