模式实现:可被继承的 Singleton
来源:互联网 发布:淘宝怎么退款申请 编辑:程序博客网 时间:2024/06/03 12:27
可被继承的singleton
Singleton模式在日常工作中的使用频率应当是很高的。一般的全局数据,全局函数等都可以放入一个Singleton类中。Singleton模式是如此的熟为人知,以至于许多的C++大拿都有专门论述。如果你想非常全面地了解它,建议读读四人帮的设计模式,读读LOKI库等。就我个人而言,大多数情况下我使用Singleton都不需要对它有很苛刻的要求,如生存时间等。
一个简单化的Singleton是很容易实现的,不过如果你每次都需要自己去实现它,难免有点不痛快,一个简单的除掉这个不痛快的方式就是写一个基类,提供一套Singleton设施,需要的时候继承自它就可以了。
不罗嗦了,俺03年写的一个东西,没几行代码:
/*******************************************************************
** Program : 可被继承的Singleton模式。
** Author : 吴龙为
** Version : 2.0
** Date : 2003-3-23
Copyright(c) 2003, all rights reserved. 欢迎随意修改使用,但请保留这份声明,如有修改,盼能发一份给我学习. Mail: kingdark@vip.sina.com
********************************************************************/
template<class SubClass>
class Singleton
{
private:
static SubClass *_instance;
static bool _create_by_instance; //避免派生类使用 Instance 函数以外的方法创建对象
public:
static SubClass * Instance();
protected:
Singleton()
{
if(!_create_by_instance)
throw std::runtime_error ("this is a singleton,you must create object by call function Instance");
}
private:
Singleton(const Singleton & );
Singleton & operator = ( const Singleton & rhs ) ;
};
template<class SubClass>
SubClass * Singleton<SubClass>::Instance ()
{
if( _instance == 0)
{
_create_by_instance = true; //表明调用者身份
_instance = new SubClass();
_create_by_instance = false; //注销调用者身份
}
return _instance;
}
template<class SubClass>
SubClass * Singleton<SubClass>::_instance = 0;
template<class SubClass>
bool Singleton<SubClass>::_create_by_instance = 0;
** Program : 可被继承的Singleton模式。
** Author : 吴龙为
** Version : 2.0
** Date : 2003-3-23
Copyright(c) 2003, all rights reserved. 欢迎随意修改使用,但请保留这份声明,如有修改,盼能发一份给我学习. Mail: kingdark@vip.sina.com
********************************************************************/
template<class SubClass>
class Singleton
{
private:
static SubClass *_instance;
static bool _create_by_instance; //避免派生类使用 Instance 函数以外的方法创建对象
public:
static SubClass * Instance();
protected:
Singleton()
{
if(!_create_by_instance)
throw std::runtime_error ("this is a singleton,you must create object by call function Instance");
}
private:
Singleton(const Singleton & );
Singleton & operator = ( const Singleton & rhs ) ;
};
template<class SubClass>
SubClass * Singleton<SubClass>::Instance ()
{
if( _instance == 0)
{
_create_by_instance = true; //表明调用者身份
_instance = new SubClass();
_create_by_instance = false; //注销调用者身份
}
return _instance;
}
template<class SubClass>
SubClass * Singleton<SubClass>::_instance = 0;
template<class SubClass>
bool Singleton<SubClass>::_create_by_instance = 0;
这个Singleton有限制条件:继承自它的类必须有无参数构造函数。对这一点有异议的话,可以重新修改一下,加点模板参数之类的。
使用相当简单,假如你有个 Global 类,需要做成一个Singleton,这样:
class Global : public Singleton<Global>
完了,简单不过还挺实用,希望你喜欢~~~
- 模式实现:可被继承的 Singleton
- 继承的Singleton模式的实现
- Singleton模式的一个实现
- Singleton模式的C++实现
- C++ singleton模式的实现
- Singleton模式的两种实现模式
- 有单例模式 Singleton 涉及的一些防止类被继承的东西
- 简单的Singleton模式的实现
- singleton模式及static成员数据的继承
- JScript下Singleton模式的实现。
- singleton设计模式的C#实现(上)
- Singleton设计模式的C#实现(下)
- PHP单子模式(SINGLETON)的简单实现
- 【转贴】Singleton模式的C++实现研究
- Singleton设计模式的C#实现(1)
- Singleton设计模式的C#实现(2)
- Singleton模式的C++实现研究
- Singleton设计模式的C#实现[转]
- 汉字编码(1 基础知识)
- 2007年展望
- 装VS2003遇到的错误:此计算机上缺少本地WEB应用程序和WEB服务开发所需的组件
- 一个简单的ant的build.xml文件包含的内容
- 匈奴人的西迁和匈奴帝国的欧洲战记
- 模式实现:可被继承的 Singleton
- 汉字编码(2 编码转换实现实例)
- 通用性的数据连结
- 正则表达式的特殊字符含义
- 杂记
- 过新年(附图)
- 读 《Windows程序设计》(5)
- 新年
- 2007.01.01