我正在编写一个用于访问文件存储库的插件接口。这个想法是访问协议(或本地文件操作)将由特定插件实现,而接口为应用程序提供了一种手段,可以在不知道存储库类型的情况下执行文件操作(例如WebDAV,FTP,本地文件系统等) )。我目前的代码库的简略摘录版本如下所示。
class Path {
virtual void ascend() = 0;
virtual void descend(string &s) = 0;
};
class RepositoryInterface {
virtual void move(Path &src, Path &dst) = 0;
virtual Path* root() = 0;
};
class LocalPath : Path {
void ascend() { ... }
void descend(string &s) { ... }
};
class LocalRepository : RepositoryInterface {
void move(Path& src, Path& dst) { ... }
Path* root() { ...; return new LocalPath(...); }
};
目的是我可以提取根路径的表示,移动目录树,并将该表示发送回move()
例程。问题是我没有看到任何方法来确保发回的路径来自我的实现,而不是其他人的。
我希望提出的问题很明确,我想知道是否有一个可接受的模式来解决这个问题。