在GOF的《设计模式 可复用面向对象软件的基础》中一共讲解了23种设计模式,我们在各种代码和框架中或多或少的发现他们的影子,为了更好的掌握这些设计模式,我们将以C++代码的形式在博文中做一个总结。
一、单例模式
1.引言
单例模式是在各种设计模式中最基础的一个设计模式,因为只涉及到一个类,所以也是最简单的一个设计模式,单例模式的主要意图和动机是什么呢?我们可以看下《设计模式 可复用面向对象软件的基础》中是怎么说的:
2. 意图
保证一个类仅有一个实例,并提供一个访问它的全局访问点。
3. 动机
对一些类来说,只有一个实例是很重要的。虽然系统中可以有许多打印机,但却只应该
有一个打印假脱机( printer spooler),只应该有一个文件系统和一个窗口管理器。一个数字滤
波器只能有一个 A/D转换器。一个会计系统只能专用于一个公司。
我们怎么样才能保证一个类只有一个实例并且这个实例易于被访问呢?一个全局变量使
得一个对象可以被访问,但它不能防止你实例化多个对象。
一个更好的办法是,让类自身负责保存它的唯一实例。这个类可以保证没有其他实例可
以被创建(通过截取创建新对象的请求) ,并且它可以提供一个访问该实例的方法。这就是
Singleton模式。
4.实现
这个类要保证没有其他实例可以被创建,则该类应该显示的定义构造函数,且构造函数为private或者protected;
提供一个访问该实例的方法,该实例必须唯一且能够被访问,该实例可以被声明为私有的静态成员,则应该提供一个公共的方法来访问该实例;
5.类图
根据以上阐述,可以画出该模式的类图为:
6.代码
我们可以得到实现单例模式的代码为:
#include <iostream>
class Singleton {
public:
static Singleton* getInstance()
{
if (m_Instance == NULL)
{
m_Instance = new Singleton();
}
return m_Instance;
}
static void destroyInstance()
{
if (m_Instance != NULL)
{
delete m_Instance;
m_Instance = NULL;
}
}
private:
Singleton();
static Singleton *m_Instance;
};
Singleton* Singleton::m_Instance = NULL;
int main(void)
{
Singleton *sig = Singleton::getInstance();
Singleton::destroyInstance();
return 0;
}
7.总结
以上为根据单例模式的定义写的代码为最简单的形式,只为说明单例模式,但是在实际项目中,情况比较复杂,如考虑线程安全等等,以后遇到各种情况还会做相应的补充。
本文是C++设计模式系列的第一篇,主要探讨单例模式。通过类图解析,展示了单例模式的结构,并提供了相应的代码实现。
4916

被折叠的 条评论
为什么被折叠?



