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();
}
这样用存在一定的风险,但是也有好处.只要个把握住就好