设计模式C++实现十七:单例模式

学习单例模式的之前,我们必须要了解static的相关用法。我通过查阅相关资料和博客,有下面一个总结文章。http://blog.csdn.net/shiwazone/article/details/45815615。

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

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

#ifndef SINGLETON_H
#define SINGLETON_H
#include<iostream>
class Singleton
{
private:
	Singleton(){}//私有化构造函数使得不能在外部构造实例
	static Singleton * singleton;//静态变量
	class Garbo//负责析构new出来的singleton,
	{
	public:
		~Garbo()
		{
			if (singleton != nullptr)
			{
				std::cout << "Destory!\n"; delete singleton;//删除singleton
			}
		}
	};
	static Garbo garbo;//当程序将要结束的时候,会析构garbo变量,将调用Garbo类的析构函数
public:
	static Singleton * GetInstance()//提供接口创建对象
	{
		if (singleton == nullptr)//通过判断是否有实例存在,如果存在就返回该地址,这样就保证只有一个实例存在
			singleton = new Singleton;
		return singleton;
	}
};

Singleton * Singleton::singleton = nullptr;//静态类型初始化格式:<数据类型> <类名>::静态数据名=初始化值

#endif
#include<iostream>
#include "Singleton.h"
using namespace std;
int main()
{
	Singleton *s1 = Singleton::GetInstance();
	Singleton *s2 = Singleton::GetInstance();
	if (s1 == s2)
		cout << "两个对象是相同的实例。\n";
	else cout << "两个对是不同的实例。\n";
	return 0;
}
时间: 2024-11-06 16:24:54

设计模式C++实现十七:单例模式的相关文章

Java设计模式(二)-单例模式

单例模式建议保证某个对象仅仅只有一个实例,当只有一个对象来协调整个系统的操作时,在计算机系统中,线程池.缓存.日志对象.对话框.打印机.显卡的驱动程序对象常被设计成单例,总之,选择单例模式就是为了避免不一致状态,避免政出多头. 下面是单例模式的类图:包括的private和static修饰的实例instance.一个private的构造函数.一个static的getInstance函数 单例模式主要有三种:懒汉式单例.饿汉式单例.登记式单例三种 1.饿汉式单例:在类的初始化时候,自行创建了实例 c

设计模式(1)--单例模式(Singleton Pattern)

概述 一个类能返回对象一个引用(永远是同一个)和一个获得该实例的方法(必须是静态方法,通常使用getInstance这个名称):当我们调用这个方法时,如果类持有的引用不为空就返回这个引用,如果类保持的引用为空就创建该类的实例并将实例的引用赋予该类保持的引用:同时我们还将该类的构造函数定义为私有方法,这样其他处的代码就无法通过调用该类的构造函数来实例化该类的对象,只有通过该类提供的静态方法来得到该类的唯一实例. 特点 根据上面所述,单例模式有如下特点: 单例类只能有一个实例: 单例类必须自己创建自

java设计模式(二)单例模式 建造者模式

(三)单例模式 单例模式应该是最常见的设计模式,作用是保证在JVM中,该对象只有一个实例存在. 优点:1.减少某些创建比较频繁的或者比较大型的对象的系统开销. 2.省去了new操作符,降低系统内存使用频率,减轻GC压力. 3.保证核心代码的唯一性,比如交易引擎. 单例模式看似是最简单的设计模式. public class Singleton { //私有构造方法,防止实例化 private Singleton(){ } //创建类的实例的时候加载 private static Factory f

大话设计模式读书笔记2——单例模式

单例模式是一种常用的软件设计模式.在它的核心结构中只包含一个被称为单例类的特殊类.通过单例模式可以保证系统中一个类只有一个实例而且该实例易于外界访问,从而方便对实例个数的控制并节约系统资源.如果希望在系统中某个类的对象只能存在一个,单例模式是最好的解决方案. 我们来看一下单例模式下的饿汉模式代码: /// <summary> /// 饿汉模式 /// </summary> public class Singleton { //私有的构造器 private Singleton() {

访问者模式 Visitor 行为型 设计模式(二十七)

访问者模式 Visitor <侠客行>是当代作家金庸创作的长篇武侠小说,新版电视剧<侠客行>中,开篇有一段独白: “茫茫海外,传说有座侠客岛,岛上赏善罚恶二使,每隔十年必到中原武林,向各大门派下发放赏善罚恶令, 强邀掌门人赴岛喝腊八粥,拒接令者,皆造屠戮,无一幸免,接令而去者,杳无音讯,生死未仆,侠客岛之行,已被视为死亡之旅.” 不过话说电视剧,我总是觉得老版的好看. 意图 表示一个作用于某对象结构中的各元素的操作. 它使你可以在不改变各元素类的前提下定义作用于这些元素的新操作.

Unity3d与设计模式(二)单例模式

为什么要使用单例模式 在我们的整个游戏生命周期当中,有很多对象从始至终有且只有一个.这个唯一的实例只需要生成一次,并且直到游戏结束才需要销毁. 单例模式一般应用于管理器类,或者是一些需要持久化存在的对象. Unity3d中单例模式的实现方式 (一)c#当中实现单例模式的方法 因为单例本身的写法不是重点,所以这里就略过,直接上代码. 以下代码来自于MSDN. public sealed class Singleton { private static volatile Singleton inst

23种设计模式第一种(单例模式)

单例模式单例模式 ------------------------------------------------------------------------------------------------------- 确保一个类只有一个实例,而且自行实例化并向整个系统提供这个实例. -------------------------------------------------------------------------------------------------- 创建类模式

java设计模式 -------- 创建模式 之 单例模式

本文是自己学习所做笔记,欢迎转载,但请注明出处:http://blog.csdn.net/jesson20121020 单例模式也是创建模式中的一种. 单例模式: 所谓的单例模式,即单一的实例,保证类在内在中只有一个对象. 举例: windows的打印服务,网络计数器 应用: 线程池,数据库连接池,Runtime 在应用单例模式前,先来看一个例子. Student.java public class Student { } StudentTest.java public class Studen

Java设计模式菜鸟系列(六)单例模式建模与实现

转载请注明出处:http://blog.csdn.net/lhy_ycu/article/details/39784403 单例模式(Singleton):是一种常用的设计模式.在Java应用中,单例对象能保证在一个JVM中,该对象只有一个实例存在.好处主要有:1.某些类创建比较频繁,对于一些大型的对象,这是一笔很大的系统开销.2.省去了new操作符,降低了系统内存的使用频率,减轻GC压力. 单例模式主要有两种实现方式:1.懒汉式:2.饿汉式 一.uml建模 二.代码实现: 1.懒汉式 /**