Singleton
来源:互联网 发布:excel数据丢失怎么恢复 编辑:程序博客网 时间:2024/05/01 11:58
CSingleton * CSingleton ::m_pRemainder = NULL;
CSingleton * CSingleton ::Instance(void)
...{
if (m_pSingleton == NULL)...{
m_pSingleton= new CSingleton ();
}
return m_pSingleton;
}
CSingleton * CSingleton ::Instance(void)
...{
if (m_pSingleton == NULL)...{
m_pSingleton= new CSingleton ();
}
return m_pSingleton;
}
class CSingleton
...{
public:
CSingleton();
virtual ~CSingleton();
static CSingleton* Instance(void);
private:
/**//*単一のインスタンス*/
static CSingleton* m_pSingleton;
};
...{
public:
CSingleton();
virtual ~CSingleton();
static CSingleton* Instance(void);
private:
/**//*単一のインスタンス*/
static CSingleton* m_pSingleton;
};
意图: 保证一个类仅有一个实例,并提供一个访问它的全局访问点。
动机:对一些类来说,只有一个实例是很重要的,例如对系统资源的控制。保证一个类只有一个实例并且这个实例易于被访问,有一个好方法来实现,就是让类自身负责保存它的唯一实例。这个类可以保证没有其他实例可以被创建(通过截取创建新对象的请求),并且它可以提供一个访问该实例的方法,这就是Singleton模式
class Singleton ...{
public:
static Singleton* Instance() ;
protected:
Singleton() ...{}
private:
static Singleton *_instance ;
} ;
Singleton* Singleton::_instance = 0 ;
Singleton* Singleton::Instance() ...{
if (_instance == 0)...{
_instance = new Singleton; //lazy initialization
}
return _instance ;
}
public:
static Singleton* Instance() ;
protected:
Singleton() ...{}
private:
static Singleton *_instance ;
} ;
Singleton* Singleton::_instance = 0 ;
Singleton* Singleton::Instance() ...{
if (_instance == 0)...{
_instance = new Singleton; //lazy initialization
}
return _instance ;
}
对唯一实例的受控访问
因为Singleton类封装它的唯一实例,所以它可以严格的控制客户怎样以及何时访问它。
缩小名空间
Singleton模式是对全局变量的一种改进。它避免了那些存储唯一实例的全局变量污染名空间。
允许对操作和表示的精化
Singleton类可以有子类,而且用这个扩展类的实例来配置一个应用是很容易的。你可以用你所需要的类的实例在运行时刻配置应用。
允许可变数目的实例
这个模式使得你易于改变你的想法,并允许Singleton类的多个实例。此外,你可以用相同的方法来控制应用所使用的实例的数目。只有允许访问Singleton实例的操作需要改变。
比类操作更灵活
另一种封装单件功能的方式是使用类操作(即C++中的静态成员函数或者是Smalltalk中的类方法)。但这两种语言技术都难以改变设计以允许一个类有多个实例。此外,C++中的静态成员函数不是虚函数,因此子类不能多态的重定义它们。
- Singleton
- Singleton
- singleton
- Singleton
- Singleton
- Singleton
- Singleton
- Singleton
- Singleton
- Singleton
- Singleton
- Singleton
- singleton
- Singleton
- Singleton
- Singleton
- Singleton
- Singleton
- 上一篇及下一篇的asp实现
- GDI+ for VCL基础 -- 画笔
- 【转载】ADOBE新产品ADOBE CS4 ADOBE BORDEAUX
- jquery选择器的使用
- 用触发器对sqlserver进行数据备份
- Singleton
- mydelphiwithexcel
- 127.0.0.1
- js获取url参数
- js定义类和对象
- 【TED ON FLEX】支持flashplayer的RIBBIT系统
- SQL*Net message from client 事件产生的原因分析
- (转贴)C++ 虚函数表解析
- Lucene-2.0学习文档(一)