单例模式,即只有一个实例。
先上uml图:
uml解析:基本思路是,构造函数为protected或者private,类不能被实例化,否则就可以有多个实例。static的特性使得类不需要被实例化就能被调用(因为它和全局变量一样是放在数据段)
下面给出可以执行的代码:
singleton.h
#pragma once
#include <iostream>
using namespace std;
class Singleton
{
protected:
Singleton(void);
~Singleton(void);
public:
static Singleton * getInstance();
void showInstance();
private:
static Singleton * m_Instance;
};
singleton.cpp
#include "Singleton.h"
Singleton * Singleton::m_Instance = NULL;//类外定义
Singleton::Singleton(void)
{
}
Singleton::~Singleton(void)
{
}
Singleton * Singleton::getInstance()
{
if ( m_Instance == NULL )
{
m_Instance = new Singleton();
}
return m_Instance;
}
void Singleton::showInstance()
{
cout<<m_Instance<<endl;
}
main.cpp
#include "Singleton.h"
int main(int argc,char ** argv)
{
Singleton *p1 = Singleton::getInstance();
p1->showInstance();
Singleton *p2 = Singleton::getInstance();
p2->showInstance();
return 0;
}
执行结果:
可以看到执行结果是一样的。当然,这样的单例类其实是有缺陷的,比如多线程需要考虑的问题,还需要把重载操作符等,留给读者自己完成。