软件设计精要之——单例模式(Singleton)

1、问题背景

Singleton模式解决问题十分常见,我们怎样去创建一个唯一的变量(对象)?在基于对象的设计中我们可以通过创建一个全局变量(对象)来实现,在面向对象和面向过程结合的设计范式(如C++中)中,我们也还是可以通过一个全局变量实现这一点。但是当我们遇到了纯粹的面向对象范式(如JAVA)中,这一点可能就只能是通过Singleton模式来实现了。

2、模式示意图

单件模式示意图

在Singleton模式的结构图中可以看到,我们通过维护一个static的成员变量来记录这

个唯一的对象实例。通过提供一个staitc的接口fnInstance来获得这个唯一的实例。

3、代码实现

代码实现如下:

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

//Singleton.h

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

#ifndef _SINGLETON_H_

#define _SINGLETON_H_

#include <iostream>

using namespace std;

class Singleton

{

public:

static Singleton* fnInstance();

public:

void fnOperateSingleton();

protected:

Singleton();

private:

static Singleton* _instance;

};

#endif //#ifndef _SINGLETON_H_

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

//Singleton.cpp

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

#include “Singleton.h”

Singleton* Singleton::_instance = NULL;

Singleton::Singleton()

{

cout<<“Construct Singleton….”<<endl;

}

Singleton* Singleton::fnInstance()

{

if (NULL == _instance)

{

_instance = new Singleton();

}

return _instance;

}

void Singleton::fnOperateSingleton()

{

cout<<“Operate the singleton!”<<endl;

}

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

//main.cpp

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

#include “Singleton.h”

void main()

{

Singleton *pSingleton = Singleton::fnInstance();

pSingleton->fnOperateSingleton();

delete pSingleton;

pSingleton = NULL;

}

运行结果如下:

Singleton不可以被实例化,因此我们将其构造函数声明为protected或者直接声明为private。

4、总结与讨论

Singleton模式在开发中经常用到,因为我们在开发过程中有一些对象在整个系统中需要是唯一的。

声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!

上一篇 2019年7月16日
下一篇 2019年7月16日

相关推荐