在定义一个条件后始终使用一个类

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)

  • 他们称之为*策略设计模式*吗?我个人称之为继承.(不是试图挑战,但DP社区倾向于组成名称,使简单的事情听起来比他们更复杂.) (2认同)