其整体结构不怎么面向对象
以一份全局指针的方式访问某个系统模块或管理器,一切沿袭自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,这样以后的某个模块要做成动态库版本,只需通过获得这个接口指针就可