标签:
问题描述
Singleton 模式解决问题十分常见, 我们怎样去创建一个唯一的变量( 对象)?在基于对象的设计中我们可以通过创建一个全局变量(对象) 来实现,在面向对象和面向过程结合的设计范式(如C++中)中,我们也还是可以通过一个全局变量实现这一点。但是当我们遇到了纯粹的面向对象范式中,这一点可能就只能是通过Singleton模式来实现了,可能这也正是很多公司在招聘 Java 开发人员时候经常考察Singleton 模式的缘故吧。
(全局变量在项目中是能不用就不用的,它是一个定时炸弹,是一个不安全隐患,特别是在多线程程序中,会有很多的不可预测性;同时,使用全局变量,也不符合面向对象的封装原则,所以,在纯面向对象的语言Java和C#中,就没有纯粹的全局变量。)
在GOF的《设计模式:可复用面向对象软件的基础》中是这样描述单例模式的:保证一个类只有一个实例,并提供一个访问它的全局访问点。首先,需要保证一个类只有一个实例;在类中,要构造一个实例,就必须调用类的构造函数,如此,为了防止在外部调用类的构造函数而构造实例,需要将构造函数的访问权限标记为protected或private;最后,需要提供要给全局访问点,就需要在类中定义一个static函数,返回在类内部唯一构造的实例。
代码实现

#include <iostream>
#include <string>
using namespace std;
class Singleton
{
private:
int i;
static Singleton *instance;
Singleton(int i)
{
this->i = i;
}
public:
static Singleton *getInstance()
{
return instance;
}
void show()
{
cout << i << endl;
}
};
Singleton* Singleton::instance = new Singleton(8899);
class A :public Singleton
{
};
int main()
{
Singleton *s = Singleton::getInstance();
Singleton *s2 = A::getInstance();
cout << (s == s2) << endl;
return 0;
}
运行结果:1
关于单例模式,推荐文章(个人觉得讲得是非常好的了):C++设计模式——单例模式
标签:
原文地址:http://www.cnblogs.com/carsonzhu/p/5774528.html