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

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模式,最常见的比如我们希望整个应用程序中只有一个...

    c++设计模式全系列+应用场景+实例说明

    2. **单例模式(Singleton Pattern)**:单例模式是一种创建型设计模式,确保一个类只有一个实例,并提供一个全局访问点。 3. **观察者模式(Observer Pattern)**:观察者模式是一种行为设计模式,定义了对象间的...

    设计模式 单键 singleton

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

    设计模式.pdf_电子版_pdf版

    Singleton 模式的意图是确保一个类只有一个实例,并提供该实例的全局访问点。这个模式的关键在于确保在整个应用程序中只有一个实例,并且提供了一个全局访问点来访问该实例。 实现 Singleton 模式 实现 Singleton ...

    单例模式(singleton)

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

    c sharp设计模式

    单件模式(Singleton Pattern)是 Creational Pattern 中的一种,旨在保证一个类仅有一个实例,并提供一个全局的访问点。该模式解决了一个基本的问题,即如何绕过常规的构造器,提供一种机制来保证一个类只有一个...

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

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

    结城浩《图解设计模式》笔记

    Singleton 模式顾名思义,就是确保程序中某个类的实例只有一个。通过将构造方法设置为 private,我们可以确保只有在 singleton 类北部才能生成实例,而在该类的外部无法创建实例对象。 通过对这些设计模式的学习,...

    IOS 单例设计模式实例Demo

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

    JAVA设计模式23种

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

    设计模式python模版

    单例模式(Singleton):确保一个类只有一个实例,并提供一个全局访问点。 工厂方法模式(Factory Method):定义一个接口用于创建对象,但让子类决定实例化哪个类。 抽象工厂模式(Abstract Factory):创建一系列...

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

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

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

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

    设计模式整理(很全)

    创建模式 设计模式之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 23种设计模式及具体例子

    * 单例模式:单例模式是一种创建型模式,它保证一个类只有一个实例,并提供一个访问该实例的全局点。 * 建造者模式:建造者模式是一种创建型模式,它提供了一种创建复杂对象的方式,而不需要指定它们的类。 * 原型...

    软件设计模式知识点

    1. 单例模式(Singleton):保证一个类仅有一个实例,并提供一个访问它的全局访问点。 2. 原型模式(Prototype):用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象。 3. 工厂方法模式(Factory...

    Java 23种设计模式通解

    3. 单例模式(Singleton):只允许有一个实例,它提供了一个全局的访问点。 4. 建造者模式(Builder):将一个复杂对象的构建与它的表示分离,使得相同的构建过程可以创建不同的表示。 5. 原型模式(Prototype):用...

Global site tag (gtag.js) - Google Analytics