`
xitong
  • 浏览: 6158863 次
文章分类
社区版块
存档分类
最新评论

Singleton设计模式(一个类只允许一个实例)

 
阅读更多

Singleton设计模式



我们知道,Singleton设计模式要求一个类class只能有一个实例instance存在,下面用C++来实现:

#include<iostream>
#include<string>
using namespace std;

class Singleton{
public:
	static Singleton* getInstance(){
		cout<<"Singleton::getInstance"<<endl;
		if(!sg){
			sg = new Singleton();	//创建实例,但在哪里释放呢?
		}
		return sg;
	}

private:
	Singleton(){			//构造函数声明为私有函数
		cout<<"Singleton::Constructor"<<endl;
	}
	static Singleton *sg;	//私有静态变量
};
//初始化静态变量sg为0,不指向任何对象
Singleton* Singleton::sg = NULL;

int main(){
	Singleton *sg = Singleton::getInstance();

	return 0;
}

代码说明:将构造函数声明为私有函数,即我们不能通过构造函数来初始化一个对象,而只能通过getInstance函数来创建一个类的实例,在该函数中,new了一个对象,却没有对应的delete语句,这将引起内存泄漏。

下面采用auto_ptr来解决内存泄漏问题:

class Singleton{
public:
	static auto_ptr<Singleton> getInstance(){
		cout<<"Singleton::getInstance"<<endl;
		if(!sg.get()){				//判断s所指对象是否为空
			auto_ptr<Singleton> temp(new Singleton);	//创建实例
			sg = temp;
		}
		return sg;
	}

private:
	Singleton(){			//构造函数声明为私有函数
		cout<<"Singleton::Constructor"<<endl;
	}
	static auto_ptr<Singleton> sg;	//私有静态变量
};
//初始化静态变量sg,此时sg不指向任何对象
auto_ptr<Singleton> Singleton::sg;

int main(){
	auto_ptr<Singleton> s(Singleton::getInstance());	//创建实例s

	return 0;
}

结果:

Singleton::getInstance
Singleton::Constructor






分享到:
评论

相关推荐

    设计模式 创建型模式 Singleton模式(单键)

    Singleton主要用于对象的创建,这意味着,如果某个类采用了Singleton模式,则在这个类被创建后,它将有且仅有一个实例可供访问。很多时候我们都会需要Singleton模式,最常见的比如我们希望整个应用程序中只有一个...

    设计模式 单键 singleton

    Singleton模式,顾名思义,Singleton就是确保一个类只有唯一的一个实例。Singleton主要用于对象的创建,这意味着,如果某个类采用了Singleton模式,则在这个类被创建后,它将有且仅有一个实例可供访问。 详细见博客 ...

    单例模式(singleton)

    一个产生随机数的例子,整个应用程序中只需要一个类的实例来产生随机数,客户端程序从类中获取这个实例,调用这个实例的方法nextInt(),公用的方法访问需要进行同步,这是单例模式需要解决的同步问题。

    JS基于设计模式中的单例模式(Singleton)实现封装对数据增删改查功能

    单例模式最初的定义出现于《设计模式》(艾迪生维斯理, 1994):“保证一个类仅有一个实例,并提供一个访问它的全局访问点。” 单例模式定义:“一个类有且仅有一个实例,并且自行实例化向整个系统提供。” var ...

    IOS 单例设计模式实例Demo

    IOS 单例设计模式实例Demo 单例 设计 模式 IOS Singleton

    JAVA设计模式23种

    保证一个类只有一个实例,并提供一个访问它的全局访问点 设计模式之Factory(工厂方法和抽象工厂) 使用工厂模式就象使用 new一样频繁. 设计模式之Builder 汽车由车轮 方向盘 发动机很多部件组成,同时,将这些部件组装...

    PHP单例设计模式,连接多数据库源码

    Singleton定义一个Instance操作,允许客户访问它唯一的实例. Instance是一个类方法,负责创建它唯一的实例. 单例的优点 1: 对唯一实例的受控访问 2: 缩小命名空间 单例模式是对全局变量的一种改进,它避免了那些存储...

    C++单实例模式示例代码

    唯一的实例是类的一个普通对象,但设计这个类时,让它只能创建一个实例并提供对此实例的全局访问。唯一实例类Singleton在静态成员函数中隐藏创建实例的操作。习惯上把这个成员函数叫做Instance(),它的返回值是唯一...

    设计模式整理(很全)

    创建模式 设计模式之Singleton(单态/单件) 阎宏博士讲解:单例(Singleton)模式 保证一个类只有一个实例,并提供一个访问它的全局访问点 设计模式之Factory(工厂方法和抽象工厂) 使用工厂模式就象使用new一样频繁....

    设计模式迷你手册.chm

    设计模式迷你手册.chm,大小仅 188 KB,图文并茂,介绍性强,每个设计模式附有 C++、C# 示例源码示例。 目录: 创建型 Factory Method Abstract Factory Builder Prototype Singleton 结构型 Adapter Bridge ...

    java设计模式

    一、Singleton,单例模式:保证一个类只有一个实例,并提供一个访问它的全局访问点 二、Abstract Factory,抽象工厂:提供一个创建一系列相关或相互依赖对象的接口,而无须指定它们的具体类。 三、Factory ...

    Android 单例模式 Singleton 简单实例设计模式解析

    主要介绍了单例模式 Singleton 简单实例设计模式解析的相关资料,需要的朋友可以参考下

    Java设计模式(含代码)

    Singleton:保证一个类仅有一个实例,并提供一个访问它的全局点。 State:允许一个对象再内部状态改变的时候改变它的行为。对象看起来似乎修改了所属的类。 Strategy:定义一系列的算法,把他们封装起来,并可以...

    设计模式 GOF 23

    本书设计实例从面向对象的设计中精选出23个设计模式,总结了面向对象设计中最有价值的经验,并且用简洁可复用的形式表达出来。本书分类描述了一组设计良好,表达清楚的软件设计模式,这些模式在实用环境下有特别有用...

    UML设计模式_9_设计模式(3)--Factory_Singleton模式

    是对类的实例化过程的抽象化。一些系统在创建对象时,需要动态地决定怎样创建对象,创建哪些对象,以及如何组合和表示这些对象。创建型模式描述了怎样构造和封装这些动态的决定。 创建型模式分为类的创建型模式...

    设计模式的代码样例

    一个关于hithub设计模式的参考样例,特点 A.这些类只能有一个实例; B.能够自动实例化; C.这个类对整个系统可见,即必须向整个系统提供这个实例。 优点 减少时间开销 减少空间内存开销 实例 系统通过spring...

    php设计模式 Singleton(单例模式)

    php /** * 单例模式 * * 保证一个类仅有一个实例,并提供一个访问它的全局访问点 * */ class Singleton { static private $_instance = null; private function __construct() { } static public function ...

    Singleton:Singleton是一种创新设计模式,可让您确保一个类只有一个实例,同时提供对该实例的全局访问点。 Python Singleton示例

    Singleton:Singleton是一种创新设计模式,可让您确保一个类只有一个实例,同时提供对该实例的全局访问点。 Python Singleton示例

    C#23种设计模式_示例源代码及PDF

    每一个子系统只有一个门面类,而且此门面类只有 一个实例,也就是说它是一个单例模式。但整个系统可以有多个门面类。 11、FLYWEIGHT —每天跟 MM 发短信,手指都累死了,最近买了个新手机,可以把一些常 、 用的...

    GoF 的 23 种设计模式

    单例(Singleton)模式:某个类只能生成一个实例,该类提供了一个全局访问点供外部获取该实例,其拓展是有限多例模式。 原型(Prototype)模式:将一个对象作为原型,通过对其进行复制而克隆出多个和原型类似的新...

Global site tag (gtag.js) - Google Analytics