Doom3源代码,code review 01

2014-11-24 12:08:15 · 作者: · 浏览: 0

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

以一份全局指针的方式访问某个系统模块或管理器,一切沿袭自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