我有一个带有纯虚方法的接口类Interface
。
class Interface
{
public:
virtual void DoSomething() = 0;
}
此外,还有一个实现接口的类Implementation
。
class Implementation : public Interface
{
void DoSomething();
}
在我的程序中,我需要一个Implementation/Interface
对的Singleton(单个实例)。程序中有许多Implementation/Interface
个类,但一个Implementation
类的Interface
个类很少。
问题:
每当我需要使用该课程时,我是否应该从我的程序的其余部分调用Interface
或Implementation
类?
我究竟应该怎么做?
//Interface needs to know about Implementation
Interface * module = Interface::Instance();
//No enforcement of Interface
Implementation * module = Implementation::Instance();
//A programmer needs to remember Implementation and Interface names
Interface * module = Implementation::Instance();
//May be there is some better way
方法Instance()
应该如何?
答案 0 :(得分:3)
" 1)每当我需要使用该类时,我应该从我的程序的其余部分调用Interface或Implementation类吗?我该怎么做?"
使用界面,通过Implementation::Instance()
来电不会使代码混乱:
Interface& module = Implementation::Instance();
// ^
请注意参考,作业和副本不会起作用。
" 2)Instance()方法应该如何?"
共同的共识是使用Scott Meyer's approach:
Implementation& Instance() {
static Implementation theInstance;
return theInstance;
}
更好的选择是根本不使用单例,而是让代码准备好专门在Interface
上运行:
class Interface {
// ...
};
class Impl : public Interface {
// ...
};
class Client {
Interface& if_;
public:
Client(Interface& if__) : if_(if__) {}
// ...
}
int main() {
Impl impl;
Client client(impl);
};