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件模式”。呵呵。
通俗解释就像上厕所: 门锁了,就等着,等到别人出来了,进去锁上,然后该干什么干什么,干完了,把门打开
门没锁,就进去,锁上,然后该干什么干什么,干完了,把门打开