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模式,则在这个类被创建后,它将有且仅有一个实例可供访问。 详细见博客 ...
一个产生随机数的例子,整个应用程序中只需要一个类的实例来产生随机数,客户端程序从类中获取这个实例,调用这个实例的方法nextInt(),公用的方法访问需要进行同步,这是单例模式需要解决的同步问题。
单例模式最初的定义出现于《设计模式》(艾迪生维斯理, 1994):“保证一个类仅有一个实例,并提供一个访问它的全局访问点。” 单例模式定义:“一个类有且仅有一个实例,并且自行实例化向整个系统提供。” var ...
IOS 单例设计模式实例Demo 单例 设计 模式 IOS Singleton
保证一个类只有一个实例,并提供一个访问它的全局访问点 设计模式之Factory(工厂方法和抽象工厂) 使用工厂模式就象使用 new一样频繁. 设计模式之Builder 汽车由车轮 方向盘 发动机很多部件组成,同时,将这些部件组装...
Singleton定义一个Instance操作,允许客户访问它唯一的实例. Instance是一个类方法,负责创建它唯一的实例. 单例的优点 1: 对唯一实例的受控访问 2: 缩小命名空间 单例模式是对全局变量的一种改进,它避免了那些存储...
唯一的实例是类的一个普通对象,但设计这个类时,让它只能创建一个实例并提供对此实例的全局访问。唯一实例类Singleton在静态成员函数中隐藏创建实例的操作。习惯上把这个成员函数叫做Instance(),它的返回值是唯一...
创建模式 设计模式之Singleton(单态/单件) 阎宏博士讲解:单例(Singleton)模式 保证一个类只有一个实例,并提供一个访问它的全局访问点 设计模式之Factory(工厂方法和抽象工厂) 使用工厂模式就象使用new一样频繁....
设计模式迷你手册.chm,大小仅 188 KB,图文并茂,介绍性强,每个设计模式附有 C++、C# 示例源码示例。 目录: 创建型 Factory Method Abstract Factory Builder Prototype Singleton 结构型 Adapter Bridge ...
一、Singleton,单例模式:保证一个类只有一个实例,并提供一个访问它的全局访问点 二、Abstract Factory,抽象工厂:提供一个创建一系列相关或相互依赖对象的接口,而无须指定它们的具体类。 三、Factory ...
主要介绍了单例模式 Singleton 简单实例设计模式解析的相关资料,需要的朋友可以参考下
Singleton:保证一个类仅有一个实例,并提供一个访问它的全局点。 State:允许一个对象再内部状态改变的时候改变它的行为。对象看起来似乎修改了所属的类。 Strategy:定义一系列的算法,把他们封装起来,并可以...
本书设计实例从面向对象的设计中精选出23个设计模式,总结了面向对象设计中最有价值的经验,并且用简洁可复用的形式表达出来。本书分类描述了一组设计良好,表达清楚的软件设计模式,这些模式在实用环境下有特别有用...
是对类的实例化过程的抽象化。一些系统在创建对象时,需要动态地决定怎样创建对象,创建哪些对象,以及如何组合和表示这些对象。创建型模式描述了怎样构造和封装这些动态的决定。 创建型模式分为类的创建型模式...
一个关于hithub设计模式的参考样例,特点 A.这些类只能有一个实例; B.能够自动实例化; C.这个类对整个系统可见,即必须向整个系统提供这个实例。 优点 减少时间开销 减少空间内存开销 实例 系统通过spring...
php /** * 单例模式 * * 保证一个类仅有一个实例,并提供一个访问它的全局访问点 * */ class Singleton { static private $_instance = null; private function __construct() { } static public function ...
Singleton:Singleton是一种创新设计模式,可让您确保一个类只有一个实例,同时提供对该实例的全局访问点。 Python Singleton示例
每一个子系统只有一个门面类,而且此门面类只有 一个实例,也就是说它是一个单例模式。但整个系统可以有多个门面类。 11、FLYWEIGHT —每天跟 MM 发短信,手指都累死了,最近买了个新手机,可以把一些常 、 用的...
单例(Singleton)模式:某个类只能生成一个实例,该类提供了一个全局访问点供外部获取该实例,其拓展是有限多例模式。 原型(Prototype)模式:将一个对象作为原型,通过对其进行复制而克隆出多个和原型类似的新...