首页 > 编程语言 > 详细

设计模式(C++版)之(Singleton)单例模式

时间:2014-02-18 13:28:37      阅读:408      评论:0      收藏:0      [点我收藏+]


单例模式(Singleton Pattern):确保某一个类只有一个实例,而且自行实例化并向整个系统提供这个实例,这个类称为单例类,它提供全局访问的方法。单例模式是一种对象创建型模式。

单例模式有三个要点:

一是某个类只能有一个实例;

二是它必须自行创建这个实例;

三是它必须自行向整个系统提供这个实例。

       单例模式是结构最简单的设计模式一,在它的核心结构中只包含一个被称为单例类的特殊类,确保对象的唯一性

单例模式结构如图3-2所示:

bubuko.com,布布扣

      单例模式结构图中只包含一个单例角色:

      ● Singleton(单例):在单例类的内部实现只生成一个实例,同时它提供一个静态的getInstance()工厂方法,让客户可以访问它的唯一实例;为了防止在外部对其实例化,将其构造函数设计为私有;在单例类内部定义了一个Singleton类型的静态对象,作为外部共享的唯一实例。

******************************************************************

代码实现:

#include <iostream>
using namespace std;


////////////////////////////
class Single
{
public:
~Single(){}

/*

为了保证成员变量的封装性,我们将Single类型的对象的可见性设置为private,但外界该如何使用该成员变量并何时实例化该成员变量呢?答案是增加一个公有的静态方法getInstance()。

在getInstance()方法中首先判断instance对象是否存在,如果不存在(即instance== null),则使用new关键字创建一个新的Single类型的对象,再返回新创建的对象;否则直接返回已有的对象。

      需要注意的是getInstance()方法的修饰符,首先它应该是一个public方法,以便供外界其他对象使用,其次它使用了static关键字,即它是一个静态方法,在类外可以直接通过类名来访问,而无须创建Single对象,事实上在类外也无法创建Single对象,因为构造函数是私有的。

*/
static Single* getInstance()
{
if (instance == NULL)
instance = new Single();

return instance;
}


private:

/*

为了确保Single实例的唯一性,我们需要禁止类的外部直接使用new来创建对象,

因此需要将Single的构造函数的可见性改为private

*/
Single()
{
cout<<"Single..."<<endl;
}


/*

类的外部无法再使用new来创建对象,但是在Single的内部还是可以创建的,可见性只对类外有效。

因此,我们可以在Single中创建并保存这个唯一实例。为了让外界可以访问这个唯一实例,需要在Single中定义一个静态的TaskManager类型的私有成员变量。

*/
static Single* instance;
}; 
//////
Single* Single::instance = NULL;

/////////////////////////////

/*

在类外我们无法直接创建新的Single对象,但可以通过代码Single::getInstance()来访问实例对象,第一次调用getInstance()方法时将创建唯一实例,再次调用时将返回第一次创建的实例,从而确保实例对象的唯一性。

*/
int main()
{
Single* sgn = Single::getInstance();
return 0;
}

******************************************************************

设计模式(C++版)之(Singleton)单例模式

原文:http://blog.csdn.net/gaoxin12345679/article/details/19362879

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!