设计模式(一)单例模式 Singleton pattern

    不扯复杂的概念,我认为设计模式就是平时解决某一类问题时,所形成的对此类的问题的解决思路的总结,适用性较强的方法。

    下面我来总结一下,实际项目中较为常见的设计模式,从易到难。

 

     首先最简单的,但适用很广泛的设计模式:单例模式(Singleton pattern)。

     使用这个模式的目的很简单,就是让一个类的对象成为项目中此类的唯一的实例,并且提供访问此对象的的唯一的一个接口。

     一些简单的例子(不知道恰不恰当):

     1.窗口对话框:Windows下的任务管理器以及网络共享中心,你只可能打开一个窗口,因为如果打开多份,多个窗口的内容相同,资源浪费,如果多个窗口内容不相同,那事情就更大发了(同一个时刻只可能有一个状态)。

    2.保存项目配置文件信息的辅助类,一般的系统中这个类会被设置成单例模式。

    3.内存池和线程池,也会被设计成单例模式。

   

    下面我们通过一个简单的程序来看一下C++中的单例模式的设计:

 

class dataBaseInfo
{
private:
	dataBaseInfo();
	~dataBaseInfo();
public:
	static dataBaseInfo* instance(void);

	void setUserName(const std::string&);
	std::string getUserName(void) const;
	//...

private:
	static dataBaseInfo* g_singleClass;

	std::string m_userName;
	std::string m_passWord;
	std::string m_ip;
	int        m_port;
	std::string m_InstanceName;

};


dataBaseInfo::dataBaseInfo():
m_userName(""),
m_passWord(""),
m_ip("0.0.0.0.0"),
m_port(0),
m_InstanceName("")
{
}

dataBaseInfo::~dataBaseInfo()
{
}

dataBaseInfo* dataBaseInfo::g_singleClass = NULL;

dataBaseInfo* dataBaseInfo::instance()
{
    if(NULL == g_singleClass)
	{
		g_singleClass = new dataBaseInfo;
	}

	return g_singleClass;
}

void dataBaseInfo::setUserName(const std::string& name)
{
	m_userName =name;
}

std::string dataBaseInfo::getUserName(void) const
{
	return m_userName;
}


int main(void)
{
	// 读取配置文件
	std::string username("jim");
  	dataBaseInfo::instance()->setUserName(username);
	//...

	return 0;
}

上面的代码片段就是一个简单的单例模式的例子:

1.将构造函数和析构函数设置为private的目的是防止,在别的地方实例化对象。

2.类中包含一个私有的静态的实例对象的指针,指针指向全局唯一的本类的实例。

3.提供了了一个唯一访问单例的静态方法instance()。


 

    

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值