Pat*_*sut 3 c++ algorithm logic
我有两个类,一个从数据库(已经实现)获取数据,另一个从文件(现在实现)完成所有工作.这里的事情是我希望能够切换流(数据库或文件).检查是数据库还是文件的过程只需要一次.因此,对于类中的每个方法,我不想每次检查调用此方法时应该使用的内容.现在,我做如下:
if(IsDataBaseStream())
Database::execQuery("SELECT * from table");
else //is FileStream
File::GetAllFrom("Table");
Run Code Online (Sandbox Code Playgroud)
这很难看.我拒绝这样做.我想过回调,但是在不同的类之间不起作用.
有没有办法不浪费像这样的处理器工作?
提前致谢
das*_*ght 10
您应该使用策略设计模式.为两个类提供一个公共基础,使用抽象方法获取数据,创建指向该基类的指针,然后在单次检查后为指针分配基于文件或基于数据库的实现.
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();
Run Code Online (Sandbox Code Playgroud)