设计模式之单例模式(c++)

问题描述

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++设计模式——单例模式

  

posted @ 2016-08-15 22:06  小金乌会发光-Z&M  阅读(865)  评论(0编辑  收藏  举报