C++设计模式之单例(Singleton)模式

来源:互联网 发布:aso优化技巧 编辑:程序博客网 时间:2024/05/28 17:04

单例模式,是一个相对简单且常用的一个设计模式,也许我们一直都在使用,只是不知道这就是单例模式。我们在大型工程中,为了让程序更具拓展性,且方便策划进行数值微调等,都会将一些内容写到一个配置文件中(常见的是XML配置文件)。程序负责解析配置文件,并根据配置内容作出相应的操作。但是,配置文件一般调配好后很少改动,且解析配置文件需要耗费一定的资源(时间、存储空间等),一般不会写一个解析类,每次需要用的时候都生成一个对象。我们的做法是,编写一个单例类,在程序初始化时对配置文件进行解析,需要用的时候都调用这个单例,最多再开一个Reload接口,让在需要时重新加载配置文件。

要编写单例类,我们就会想到要对构造函数进行处理,并且对生成对象进行控制。的确,单例模式正是这样操作的:

#ifndef __CWeaponTable_H_#define __CWeaponTable_H_class CWeaponTable{public:static CWeaponTable& GetInstance(){static CWeaponTable __inst;return __inst;}boolReload(){//解析配置文件return true;}std::stringGetWeaponName(u32 WeaponID) {}private:CWeaponTable(){Reload();}private:};#define TheCWeaponTable CWeaponTable::GetInstance()#endif
我们知道,当手动定义了类的构造函数时,类就不会合成默认的构造函数,那么我们就把它定义成private(或protected)权限,这样就不能在类外生成对象,而只能由类的函数生成。我们进一步对类中生成对象的接口进行控制,让其为静态函数,类的静态函数和数据是属于类而非对象,所有的对象都共享一份函数。

如上,我们在初始化时只需TheCWeaponTable;或CWeaponTable::GetInstance();就可以构造出一个静态对象,该对象通过定义的构造函数对配置文件进行解析。如果我们在后面需要使用该配置,直接像 TheCWeaponTable.GetWeaponName(10011) 一样用就可以。如果在需要的时候,我们同样可以从新解析配置文件 TheCWeaponTable.Reload() 。
单例模式核心的部分就是私有化构造函数,且只提供一个静态的生成对象的接口。

原创粉丝点击