设计模式笔记之---单例模式

本文详细介绍了设计模式中的单例模式,包括其作用、UML类图和实现方法。通过私有构造函数、静态指针和公共接口确保类只有一个实例,并提供全局访问点。示例代码展示了单例模式在实际应用中的效果,证明了同一实例的共享。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

UML类图:

                  

实现方法:

1.创建一个指向唯一实例的静态指针,并且是私有的。

2.提供一个公用的接口,已获取这个唯一的实例,如果唯一实例不存在,在接口内部首先将它创建出来。

3.将类的构造函数设置为私有的,保证用户不能通过其它方式创建实例。

4.将类的析构函数设置为私有的,因为类只有一个实例,不能让用户随便删除,这样用户调用delete来释放实例对象时,编译器会报错,指示非法。

单例模式基本代码如下:

/********************************************************************
filename: 	Singleton.h
created:	2012-09-24
author:		firehood

purpose:	firehood 学设计模式之---单例模式
*********************************************************************/
#include<stdio.h>
#pragma once

class Singleton
{
public:
	static Singleton* GetInstance(void);
private:
	static void Destory(void);
	Singleton(void);
	~Singleton(void);
    Singleton(const Singleton&);
	Singleton& operator = (const Singleton&);
private:
	static Singleton* pInstance;
};

/********************************************************************
filename: 	Singleton.cpp
created:	2012-09-24
author:		firehood

purpose:	firehood 学设计模式之---单例模式
*********************************************************************/
#include "Singleton.h"
#include <iostream>
using namespace std;

Singleton* Singleton::pInstance = NULL;
Singleton::Singleton(void)
{
}

Singleton::~Singleton(void)
{
}

Singleton* Singleton::GetInstance(void)
{
	if(pInstance == NULL)
	{
		pInstance = new Singleton();
		// 注册终止函数(进程退出时调用)
		atexit(Destory);
	}
	return pInstance;
}

void Singleton::Destory(void)
{
	if(pInstance)
	{
		cout<< "释放实例内存.."<<endl;
		delete pInstance;
		pInstance = NULL;
	}
}


客户端调用代码:

#include "Singleton.h"
#include <iostream>
using namespace std;

int main(int argc,char* argv[])
{
	cout<<"*************************************"<<endl;
	cout<<"firehood 学设计模式之---单例模式"<<endl;
	cout<<"*************************************"<<endl;
    
	Singleton* pInstance1 = Singleton::GetInstance();
	cout<<"实例1:"<<hex<<pInstance1<<endl;

	Singleton* pInstance2 = Singleton::GetInstance();
	cout<<"实例2:"<<hex<<pInstance2<<endl;

	if(pInstance1 == pInstance2)
	{
		cout<<"实例1和实例2为同一个实例"<<endl;
	}
	
	system("pause");
	return 0;
}

运行结果:

*************************************
firehood 学设计模式之---单例模式
*************************************
实例1:003A64E8
实例2:003A64E8
实例1和实例2为同一个实例
请按任意键继续. . .

释放实例内存..


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值