单例设计模式:一个类在内存中的对象只能有1个
步骤:
1、构造函数私有化
2、创建一个指向本类对象的静态指针
3、创建一个静态函数,返回2中的指针
饿汉式:在程序启动或单件模式类被加载的时候,单件模式实例就已经被创建。
class Single2
{
private:
Single2()
{data=0;}
static Single2 *s;
int data;
public:
static Single2 * getInstance()
{
return s;
}
void setData(int i)
{
data=i;
}
void getData()
{
cout<<data<<endl;
}
};
Single2* Single2::s=new Single2();
class Single
{
private:
Single()
{
data=0;
}
static Single *s;
int data;
public:
static Single* GetInstance()
{
if(s==NULL)
{
s=new Single();
}
return s;
}
void setData(int i)
{
data=i;
}
void getData()
{
cout<<data<<endl;
}
};
Single* Single::s=NULL;
懒汉式还有一个应用是:可以创建多个对象,而不仅仅是一个
#include<iostream>
using namespace std;
class Single
{
private:
Single()
{
data=0;
}
static Single *s;
int data;
static int count;
public:
static Single* GetInstance()
{
//if(s==NULL)
if(count<3)//可以最多有3个实例
{
s=new Single();
count++;
}
return s;
}
void setData(int i)
{
data=i;
}
void getData()
{
cout<<data<<endl;
}
};
int Single::count;
Single* Single::s=NULL;
class Single2
{
private:
Single2()
{data=0;}
static Single2 *s;
int data;
public:
static Single2 * getInstance()
{
return s;
}
void setData(int i)
{
data=i;
}
void getData()
{
cout<<data<<endl;
}
};
Single2* Single2::s=new Single2();
void main()
{
cout<<"---------------懒汉式 最多3个实例------------------------"<<endl;
Single *s1;
s1=Single::GetInstance();
Single *s2;
s2=Single::GetInstance();
Single *s3;
s3=Single::GetInstance();
Single *s4;
s4=Single::GetInstance();
Single *s5;
s5=Single::GetInstance();
s1->setData(1);
s2->setData(2);
s3->setData(3);
s4->setData(4);
s5->setData(5);
s1->getData();
s2->getData();
s3->getData();
s4->getData();
s5->getData();
cout<<"-------------饿汉式 单例--------------------------"<<endl;
Single2 *ss1;
ss1=Single2::getInstance();
ss1->setData(100);
Single2 *ss2;
ss2=Single2::getInstance();
ss1->setData(200);
ss1->getData();
ss2->getData();
}