Loki的SingletonHolder解析
来源:互联网 发布:ios软件开发是什么 编辑:程序博客网 时间:2024/05/21 08:36
不得不说说Loki这个库还是相当厉害的,采用模板的方式实现了很多的设计模式,例如单体模式、策略模式、访问者模式、工厂模式等。下面从Loki库入门的设计模式介绍一下,
Loki的单体模板类设计的非常强大,通过策略模式将单体的各个组件给模块化了,非常厉害,如下:
template
<
typename T,
template <class> class CreationPolicy = CreateUsingNew,
template <class> class LifetimePolicy = DefaultLifetime,
template <class, class> class ThreadingModel = LOKI_DEFAULT_THREADING_NO_OBJ_LEVEL,
class MutexPolicy = LOKI_DEFAULT_MUTEX
>
class SingletonHolder
SingletonHolder的模板参数主要是创建策略、生命周期策略和线程模型。
1.创建策略默认使用new操作符来创建对象,当然也可以使用C语言的内存分配来创建CreateUsingMalloc或则CreateStatic,也可以从这些模板创建方法中派生出自己的创建策略,但是一定要实现里面的函数接口,例如有一个参数的构造类,可以像如下这样来编写自己的创建类
class CreateUsingOneNew : public CreateUsingNew
{
public:
static T* Create()
{ return new T(xxx); }
static void Destroy(T* p)
{ delete p; }
}
必须要实现的是Create、和Destory函数。
2.生命周期,由于单体是在程序的运行期会一直存在,那么其生命周期默认是程序结束之后析构对象,其默认的就是如此DefaultLifetime,针对某些特殊的情况,多个单体对象,但是在析构的时候需要区分优先级,这时可以使用PhoenixSingleton规则来决定其对象释放的先后顺序。
3.线程模式,主要针对咱们的应用程序的类型,如果应用程序使用了多线程则需要线程安全模式,否则以单线程来执行即可。
4.其他的单体实现方式,也可以通过继承的结构来实现,模板类传入子类的名称即可,见如下简写代码
template<class T>
class BaseSingleton
{
public:
T instance()
{
static T instance();
return instance;
}
private:
BaseSingleton& operator=(const BaseSingleton&);
BaseSingleton(const BaseSingleton&);
}
class DerivedSingleton : public BaseSingleton<DerivedSingleton>
{}
- Loki的SingletonHolder解析
- 一个基于Loki::SingletonHolder的Windows线程安全的C++日志类实现
- Loki的TypeList技术解析
- 郁闷的Loki::SmartPtr
- Loki 单键的使用
- loki factory的使用
- Loki的继承生成器
- Loki库的使用
- loki
- Loki的名字和Andrei
- 关于boost和loki的智能指针
- Loki库:多继承的改良
- Loki库里的Acyclic Visitor
- Loki库里的Cyclic Visitor
- 对Loki::Tuple的扩展EasyTuple
- Python , Delphi , Loki 有趣的来源
- Loki系列一:优雅的Typelist
- Loki 智能指针 SmartPtr 的使用
- Hive语言手册之二:变量替换
- 【经典排序算法】桶排序
- Uva 10079 - Pizza Cutting 解题报告(递推)
- linux中/usr 的由来及/usr目录结构
- C#语言SqlClient接口SQL Server数据库类
- Loki的SingletonHolder解析
- Ant 在Myeclipse8+ 编译java类卡死的解决方案
- log4j总结
- 将hibernate的SessionFactory交给spring管理——东方标准(专注IT、服务中国)续……
- 数据库SQL语句书写注意事项
- 图像特征之LBP 局部二值模式
- 操作json数据
- 【iOS】iOS Object-C与C混编设置
- web.xml(3)_filter