设计模式 之单件模式
一、构造函数是private ,所以他是独一无二,不会产生多的对象。
二、调用实例化,一般是通过调用一个 公有的静态函数 getInstance()来获取对象。
当我们在多线程的时候,可能会产生多个对象,为什么呢?因为会出现同步的问题,所以我们的
getInstance 需要做一个同步。
statict Person* getInstance()
{
if(signel==NULL) //这个地方,多线程的时候,可能存在当二个线程都为空,然后各自创建的情况。
signel = new Person();
return signel;
}
如果同步,那么可能存在同步消耗,如果大量的有这个消耗,那么我们就需要重新考虑,如果我们的应用能
接受这种消耗,那么我们则可以不理睬这个,继续用我们以前的单件方式。
急切实例:
static Person* signel = new Person();
static Persion* getInstance() //在调用 getInstance 前,signel 就存在。
{
return signel;
}
双重检测加锁:
static Persion* signel;
static Persion* getInstance()
{
if(signel==NULL) //只需要在第一此创建的时候才有同步,大大的加快了速度
{
synchronized(signel)
{
if(signel==NULL)
signel = new Persion();
}
}
return signel;
}
通用实例:
static Persion* signel;
static Persion* getInstance()
{
synchronized(signel) //如果需要大量的调用实例,那么就会出现资源的消耗
{
if(signel==NULL)
signel=new Persion();
}
return signel;
}
什么时候需要一个单件呢?首先,我们确定我们的程序最多只需要一个类的实例。
最近在进行一个项目的架构,所以会把用到的设计模式都做一个总结贴出来,代码和语句可能不完整。等架构完成后,会写一些最近做的hi3559a的一些内容。