为什么用 getSingleton() 来掉方法?

来源:百度知道 编辑:UC知道 时间:2024/06/06 07:35:07
代码如下
HardwareBufferManager::getSingleton().createVertexDeclaration();
见到类似的很多
为何不直接写HardwareBufferManager::createVertexDeclaration()?
望高手解答!

getSingleton是一个静态成员函数,返回一个唯一的HardwareBufferManager对象,所以才把它叫Singleton。而createVertexDeclaration是普通成员函数不能直接调用,必须通过对象。

这个叫做单态设计模式,也就是说他要保证整个系统中只有一个HardwareBufferManager对象.

如果按你说的HardwareBufferManager::createVertexDeclaration(),那么他要把所有的属性和方法都写成static的,那样会非常不和谐,而且HardwareBufferManager的初始化还必须要手动控制了.

所以一般实现单态模式的人,都会用下面这种形式
class Show
{
private:
Show();
static Show* singleton;
public:
static Show* Singleton() { return singleton; }

void OtherMethod();
};

Show* singleton = new Show();

这样系统启动时会自动初始化这个实例,而且系统中只有一个Show类型的对象

为了保证系统中有唯一的HardwareBufferManager实例