C++的单件模式 双件模式! N件模式!(转载) 2009-12-10 22:23

什么是单件模式? 在面向对象的程序设计中,对群体数据的管理一般都会设计一个管理类,但这个管理类有个特点,就是在整个程序中不需要多个副本,否则多个副本会占用无谓的内存,而且对于抽象模型会不易理解。

这时就需要设计一个只允许存在一

个实例的类,这样的类就是类的单件模式应用。简单的说:单件模式即一个类在整个程序运行过程中只能有一个实例(唯一对象)

使用单件模式 1、单件模式首先就是要严格控制类的对象的创建,与类对象创建相关的函数有两个:构造函数和拷贝构造函数,要想控制创建,就需要将这两个函数声明为私有。 2、实现一个类的静态成员函数,用于返回一个静态对象,这样就可以让类有且仅有一个对象了。 单件模式的例子:

//例子声明

class CSample

{

public:

static CSample & GetInstance(); //创建类对象的唯一接口

void Test();//测试函数,其它省略

private:

//将构造函数和拷贝构造函数声明为私有,使得不能使用类名字创建对象

CSample();

CSample(CSample & _cs); 。 。 。 //可以添加一大堆的数据成员变量

};

//实现

CSample::CSample()

{

//默认构造函数

}

CSample::CSample( CSample & _cs )

{

//拷贝构造函数

}

CSample & CSample::GetInstance()

{

//创建一个静态对象,唯一的,这里创建几个static类对象就是几模式。

        //因为静态变量是在编译时候分配内存地址的,而不是运行的时候,所以实际调用的时候无论调用几次这个函数

        //都不会生成新的对象,所以只会有一个对象

static CSample cs;

return cs;

}

void CSample::Test()

{

//用于查看多个对象的引用是否指向同一地址

cout<<&GetInstance()<<endl; }

int main()

{

// CSample cs1; //错误,无法访问私有成员

CSample &cs2=CSample::GetInstance();

CSample &cs3=CSample::GetInstance();

cs2.Test();

cs3.Test();

return 0;

}

输出结果: 0047BDCB 0047BDCB

这样,程序中就只能有一个类的实例了。具体应用大家自己体会吧。 可以由此来衍生出“双件模式”,“N件模式”。呵呵。

 

 

通俗解释就像上厕所: 门锁了,就等着,等到别人出来了,进去锁上,然后该干什么干什么,干完了,把门打开

门没锁,就进去,锁上,然后该干什么干什么,干完了,把门打开