使控制器能够在C++中同时使用到不同的存储库
这在Python中非常简单,现在对我来说成了一个真正的问题 我的课程结构如下: 域基本数据结构 存储库 需要存储库才能工作的控制器 我的控制器构造函数是:使控制器能够在C++中同时使用到不同的存储库,c++,oop,C++,Oop,这在Python中非常简单,现在对我来说成了一个真正的问题 我的课程结构如下: 域基本数据结构 存储库 需要存储库才能工作的控制器 我的控制器构造函数是: Controller::Controller(Repository *repo) { this->repo = repo; } 现在我有了另一个存储库来管理一些文件。我想使用相同的控制器,但我以前的工作方式是错误的,因为我不能 问题可能在于: class Controller { private: Repository
Controller::Controller(Repository *repo)
{
this->repo = repo;
}
现在我有了另一个存储库来管理一些文件。我想使用相同的控制器,但我以前的工作方式是错误的,因为我不能
问题可能在于:
class Controller
{
private:
Repository *repo;
//blah blah blah
我怎样才能使它尽可能的通用?我觉得这里缺少了一些基本的OOP原则
有些同事是这样做的:
class Controller
{
private:
Repository *memoryRepository;
FileRepository *fileRepository;
}
他们只是选择哪一个将与很多很多if-else语句一起使用。必须有一种更优雅的方式来做到这一点
基本上,我希望能够做这样的事情。
假设用户可以选择是从文件加载和保存数据,还是只使用内存
if(useFiles == true)
{
FileRepository *fileRepo = new FileRepository();
Controller *controller = new Controller(fileRepo);
ConsoleUI *ui = new ConsoleUI(controller);
}
else
{
Repository *repo = new Repository();
Controller *controller = new Controller(repo);
ConsoleUI *ui = new ConsoleUI(controller);
}
我想我可以为我的控制器类使用模板
template<typename R>
class Controller
{
private:
R *repo;
现在我可以写这样的东西了
Repository*r=新文件存储库
我认为这是我问题的正确答案。有任何反馈吗?您的Controller::Controller内存泄漏。您要使用“新建”或“分配”进行分配。但你真的应该考虑使用智能指针。使用向量而不是单个指针来允许多个存储库。如果控制器有多个存储库,你希望控制器如何确定它应该使用哪个存储库?@Lisheeste我根据我的需要为他创建了一个不同的存储库@Crashstr指出,控制器的构造函数显然是错误的。您有两个连续的语句为同一成员变量赋值。你能解释一下你认为这些陈述在做什么吗?这样我们就可以告诉你如何实现你的目标。
class FileRepository: public Repository