设计模式学习笔记DAY03-单例模式(Singleton)

本文介绍了单例模式的概念、实现方式及应用场景。详细解释了如何确保一个类只有一个实例,并且能够被整个系统所共享。适用于资源管理等场景。

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

三、单例模式
1.简介
    单例模式确保某一个类只有一个实例,而且自行实例化并向整个系统提供这个实例。这个类称为单例类。单例模式的要点有三个;一是某个类只能有一个实例;二是它必须自行创建这个实例;三是它必须自行向整个系统提供这个实例。
2.实现方式
    我们通过维护一个static的成员变量来记录这个唯一的对象实例(在面向过程中甚至可以直接用一个全局变量做到这一点)。通过提供一个staitc的接口instance 来获得这个唯一的实例。
3.应用场景
    在计算机系统中,需要管理的资源包括软件外部资源,譬如每台计算机可以有若干个打印机,但只能有一个Printer Spooler, 以避免两个打印作业同时输出到打印机中。每台计算机可以有若干传真卡,但是只应该有一个软件负责管理传真卡,以避免出现两份传真作业同时传到传真卡中的情况。每台计算机可以有若干通信端口,系统应当集中管理这些通信端口,以避免一个通信端口同时被两个请求同时调用。需要管理的资源包括软件内部资源,譬如,大多数的软件都有一个(甚至多个)属性(properties)文件存放系统配置。这样的系统应当由一个对象来管理一个属性文件。需要管理的软件内部资源也包括譬如负责记录网站来访人数的部件,记录软件系统内部事件、出错信息的部件,或是对系统的表现进行检查的部件等。这些资源管理器构件必须只有一个实例,这是其一;它们必须自行初始化,这是其二;允许整个系统访问自己这是其三。因此,它们都满足单例模式的条件,是单例模式的应用。
4.实现
    当单例类提供事例的函数被调用时,首先检查这个实例之前是否已经被实例化,如果已经被实例化,则返回该对象实例的引用(或者指针),若是没有实例化则实例化一个新的对象并返回它的引用(new一个新的指针并将它返回)。为了确保这一点我们需要将构造函数声明成为私有的。
    实现:
   
//Singleton.h
#pragma once

class Singleton
{
	private:
		Singleton();
		static Singleton* m_Instance;
	public:
		static Singleton* GetInstance();
	public:
		void DoSomeThing();
};
//Singleton.cpp
#include "StdAfx.h"
#include "Singleton.h"
#include <iostream>
using namespace std;

Singleton* Singleton::m_Instance = NULL;

Singleton::Singleton()
{

}

Singleton* Singleton::GetInstance()
{
	if (NULL == m_Instance)
	{
		m_Instance = new Singleton();
	}
	return m_Instance;
}

void Singleton::DoSomeThing()
{
	cout<<"Print Singleton"<<endl;
}
//main.cpp
#include "stdafx.h"
#include "Singleton.h"

int _tmain(int argc, _TCHAR* argv[])
{
	Singleton* pSingleton = Singleton::GetInstance();
	pSingleton->DoSomeThing();

	while(1);
	return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值