关于栈上的单体结构

来源:互联网 发布:读屏软件下载 编辑:程序博客网 时间:2024/04/28 21:28
class createFun
{
public :
virtual int * create(){return new int;}

};

我定义了这样一个对象,如果希望这个对象实现一个单体模式,那么常用的就是在堆上构建,如:在内部这么写

class createFun
{
public :

static createFun* _instance(){

static  createFun* s_instance = null;

if(!s_instance)

s_instance = new  createFun;

return s_instance;

}
static int * create(){return new int;}

};

调用时可以这样 createFun::_instance()->create();

在全局架构这样写是可以的,但是如果我希望在局部构建出一个单体,怎么办?

static 定义的全局变量只能在定义的地方使用,可以起到保护作用,所以我们如果在局部构建单体(全局),如果直接写createFung_Create;安全性就不太好了。

当然我可以这么写:

namespace {

static createFun g_Create;

}

好了这样做可以实现局部全局变量,单从设计模式和实际使用,这样写不方便封装和管理,我们希望在对象内部定义一个单体的模型,可以这么写:

class createFun
{
public :
virtual int * create(){return new int;}

static createFun s_singleCreate;

};

createFun createFun::s_singleCreate;

//为方便子类的通用获取单体,可以写这样一个宏

#define BUILDER(F) & F::s_singleCreate

可以这样使用

createFun *a = BUILDER(createFun); 

OK,我们也把这样一类对象指针放到一个数组或者容器中进行管理,读过设计模式应该可以理解。








0 0
原创粉丝点击