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

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

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

#ifndef __CWeaponTable_H_
#define __CWeaponTable_H_

class CWeaponTable
{
public:
	static CWeaponTable& GetInstance()
	{
		static CWeaponTable __inst;
		return __inst;
	}

	bool	Reload()
	{
		//解析配置文件
		return true;
	}

	std::string	GetWeaponName(u32 WeaponID) {}

private:
	CWeaponTable()
	{
		Reload();
	}

private:

};
#define TheCWeaponTable CWeaponTable::GetInstance()

#endif
我们知道,当手动定义了类的构造函数时,类就不会合成默认的构造函数,那么我们就把它定义成private(或protected)权限,这样就不能在类外生成对象,而只能由类的函数生成。我们进一步对类中生成对象的接口进行控制,让其为静态函数,类的静态函数和数据是属于类而非对象,所有的对象都共享一份函数。

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值