其整體結構不怎麼面向對象
以一份全局指針的方式訪問某個系統模塊或管理器,一切沿襲自C版本的idTech設計,如下
// FileSystem.h
class idFileSystem {
public:
void Init( void ) = 0;
void Shutdown( void ) = 0;
// methed...
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,這樣以後的某個模塊要做成動態庫版本,只需通過獲得這個接口指針就可
摘自 Corner Zhang