Zade's Weblog

程序人生

Category Archives: design pattern

单键模式的一种特殊实现

在设计模式中,单键模式是最简单的一种.我原来以为这种简单的模式使用的场景不会太多.但是实际经验告诉我,使用的非常多,几乎在我经手的每个项目中都使用了这个模式.

这个模式的具体实现有几种:

class Singleton{

private:

Singleton();

static Singleton inst;

public:

 static  Singleton& instance(){

return inst;

}

};

class Singleton{

private:

Singleton();

public:

 static  Singleton& instance(){

static Singleton inst;

return inst;

}

};

class Singleton{

private:

Singleton();

static Singleton *inst;

public:

 static  Singleton& instance(){

if(inst == NULL){

    inst = new Singleton();

}

return *inst;

}

};

 

可能还有其他的模式,不再枚举了.

这几种实现有一个共同的特点,即这个单件对象是被动创建的,或者在静态存储区,或者在堆上.为什么不由使用者主动创建呢?

当然,使用者可能主动创建多个,在这种情况下,我们可以采用一些方法避免这个.主动创建的好处是:使用者控制这个对象是创建在栈上还是堆上.例如:

class Singleton{

static Singleton *inst;

public:

Singleton(){

   if(inst != NULL){

std::cout << “can’t create more than once”;

abort();

    }

    inst = this;

}

 static  Singleton* instance(){

return  inst;

}

};

void func()

{

     Singleton::instance()->func();

}

int main(){

      Singleton myinst;

     func();

}

这样用存在一定的风险,但是也有好处.只要个把握住就好