单例和接口实现

时间:2015-05-31 11:58:20

标签: c++ interface singleton

我有一个带有纯虚方法的接口类Interface

class Interface
{
public:
    virtual void DoSomething() = 0;
}

此外,还有一个实现接口的类Implementation

class Implementation : public Interface
{
    void DoSomething();
}

在我的程序中,我需要一个Implementation/Interface对的Singleton(单个实例)。程序中有许多Implementation/Interface个类,但一个Implementation类的Interface个类很少。

问题:

  1. 每当我需要使用该课程时,我是否应该从我的程序的其余部分调用InterfaceImplementation类? 我究竟应该怎么做?

     //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
    
  2. 方法Instance()应该如何?

1 个答案:

答案 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);
 };