设计模式(C++实现)(二)——单例模式

示例问题:

一个程序中,有一个管理类,这个管理类,只想实例化一个对象,且要保证这个类只有一个实例化对象。

分析:

全局变量不能解决该问题,全局变量不能防止一个类实例化多个对象。

解决方案:

Singleton.h

单例类的实现

该类的构造函数和析构函数声明为私有的(为了防止除了提供该类的全局访问点外的其他方法创建该类的对象)

该单例模式的实现,是利用static关键字的特性。即static声明的变量,第一次初始化分配内存后,就算函数或者代码块执行完毕,该变量也不会被回收、销毁(在程序退出后,才回被回收销毁);且之后再访问该变量,该变量的内存地址也不会变(内存地址在静态存储区)。

#pragma once

class CSingleton
{
private:
	CSingleton()
	: m_iCount(0)
	{

	}
	virtual ~CSingleton()
	{

	}

	int m_iCount;

public:
	static CSingleton* GetInstance()
	{
		static CSingleton inst;
		return &inst;
	}

	void CountAdd(int iNum)
	{
		m_iCount += iNum;
	}

	int GetCountNum()
	{
		return m_iCount;
	}
};

 

main.cpp

// main.cpp : 定义控制台应用程序的入口点。
//

#include "Singleton.h"
#include <iostream>

int main()
{
	CSingleton::GetInstance()->CountAdd(3);
	std::cout << "地址:" << CSingleton::GetInstance() << std::endl;
	std::cout << "计数:" << CSingleton::GetInstance()->GetCountNum() << std::endl;

	CSingleton::GetInstance()->CountAdd(90);
	std::cout << "地址:" << CSingleton::GetInstance() << std::endl;
	std::cout << "计数:" << CSingleton::GetInstance()->GetCountNum() << std::endl;
	system("pause");
    return 0;
}

程序执行结果:

可见两次访问单例类的对象为同一地址。

 

单例模式的使用:

单例模式,保证一个类仅有一个实例,并提供一个访问它的全局访问点。

何时使用单例模式:

通常我们可以让一个全局变量是的一个对象被访问,但它不能防止你实例化多个对象。一个最好的办法就是,让类自身负责保存它的唯一实例。这个类可以保证没有其他实例可以被创建,并且它可以提供一个访问该实例的方法。

 

返回目录:设计模式(C++实现)(总)

上一篇:设计模式(C++实现)(一)——设计模式总原则及六大原则

下一篇:设计模式(C++实现)(三)——简单工厂模式

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值