其整体结构不怎么面向对象

以一份全局指针的方式访问某个系统模块或管理器,一切沿袭自C版本的idTech设计,如下

// FileSystem.h

class idFileSystem {
public:
      virtual void   Init( void ) = 0;
      virtual void   Shutdown( void ) = 0;

      // methed...
      virtual void   ListFiles( ... ) = 0;

};

extern idFileSystem*   fileSystem;

// FileSystem.cpp
#include "FileSystem"

class idFileSystemLocal: public idFileSystem {
public:
      void   Init( void );
      void   Shutdown( void );

      // methed...
      void   ListFiles( ... );

};

idFileSystemLocal   fileSystemInstance;
idFileSystem*   fileSystem = &fileSystemInstance;

void   idFileSystemLocal::Init( void ) {
}

void   idFileSystemLocal::Shutdown( void ) {
}

// methed...
void   idFileSystemLocal::ListFiles( ... ) {
}

然后其使用端代码如下:
fileSysem->Init();

fileSystem->ListFile( files, .... );

fileSystem->Shutdown();

这种手法大量运用,很好的达到了子系统间的解耦!!
里面的idCommon, idCmdSystem, idRenderSystem, idSoundSystem, idCVarSystem, idGame等,都是这一套

简单而有效的tip,这样以后的某个模块要做成动态库版本,只需通过获得这个接口指针就可