您现在的位置: 天极网 > 开发频道 > STL泛型编程与设计新思维
全文

STL泛型编程与设计新思维

2004-01-02 15:43作者:徐景周出处:51CMM责任编辑:方舟
  下面是一个简单的泛化Singleton模式的实现(不考虑线程因素)

template
< class T,
 template<class> calss CreationPolicy = CreateUsingNew,
 template<class> class LifetimePolicy=DefaultLifetime,

classs SingletonHolder
{
 public:
  static T& Instance()
  {
   if(!pInstance_)
   {
    if(destroyed_)
    {
     LifetimePolicy<T>::OnDeadReference();
     destroyed_ = false;
    }
    pInstance_ = CreationPolicy<T>::Create();
    LifetimePolicy<T>::SchedultCall(&DestorySingleton);
   }
   return *pInstance_;
  }
 private:
  static void DestroySinleton()
  {
   assert(!destroyed_);
   CreationPlicy<T>::Destroy(pInstance_);
   pInstance_ = 0;
   destroyed_ = true;
  } SingletonHolder();
  SingletonHolder (const SingletonHolder &);
  SingletonHolder & operator= (const SingletonHolder &); 

  Static T* pInstance_;
  Static bool destroyed_;
};

  Instance()是SingletonHolder开放的唯一一个public函数,它在CreationPolicy、LifetimePolicy中打造了一层外壳。其中模板参数类型T,接收类名,既需要进行Singleton的类。模板参数内的类模板缺省参数CreateUsingNew是指通过new操作符和默认构造函数来产生对象,DefaultLifetime是通过C++规则来管理生命期。 LifetimePolicy<T>中有二个成员函数,ScheduleDestrution()函数接受一个函数指针,指向析构操作的实际执行函数,如上面DestorySingleton析构函数;OnDeadReference()函数同上面一般C++中同名函数相同,是负责发现失效实例来抛出异常的。CreationPlicy<T>中的Create()和Destroy()两函数是用来创建并摧毁具体对象的。

  下面是上述泛化Singleton模式实现的使用:

  1、应用一

class A{};
typedef SingletonHolder<A, CreateUsingNew> SingleA;

  2、应用二

class A{};
class Derived : public A {};
template<class T> struct MyCreator : public CreateUsingNew<T>
{
 static T* Create()
 {
  return new Derived;
 }
 static void Destroy(T* pInstance)
 {
  delete pInstance;
 }
}
typedef SingletonHolder<A,MyCreator> SingleA;

  通过上面示例可以看出, SingletonHolder采用基于plicy设计实现,它将Singleton对象分解为数个policies,模板参数类中CreationPolicy和LifetimePolicy相当于二个policies封装体。利用它们可以协助制作出使用者自定义的Singleton对象,同时还预留了调整和扩展的空间。由此而得,泛型组件(generic components),是一种可复用的设计模板,结合了模板和模式,是C++中创造可扩充设计的新方法,提供了从设计到代码的简易过渡,帮助我们编写清晰、灵活、高度可复用的代码。

共5页。 9 7 1 2 3 4 5

软件资讯·软件下载尽在天极软件

共5页。 首页 上一页 1 2 3 4 5
相关搜索:
关注此文读者还看过
热门关注
特别推荐
网友关注
软件下载
娱乐下载
驱动下载
文章排行
本周
本月
最近更新
关于我们|About us|网站律师|天极服务|电子杂志|RSS订阅|加入我们|网站地图
TMG
Copyright (C) 1999-2009 Chinabyte.com, All Rights Reserved 版权所有 天极网络
商务联系、网站内容、合作建议:010-82657868
版权声明 在线提交意见反馈 渝ICP证B2-20030003号
经营性网站备案信息 网警备案 中国网站排名
天极传媒:天极网|比特网|IT专家网|IT商网|52PK游戏网|IT分众