快速业务通道

泛型编程与设计新思维

作者 佚名技术 来源 程序设计 浏览 发布时间 2012-06-29
olicy = 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++中创造可扩充设计的新方法,提供了从设计到代码的简易过渡,帮助我们编写清晰、灵活、高度可复用的代码。

参考文献

C++ Primer(第三版) --- 潘爱民等译

Effective C++(第二版) --- 侯捷译

More Effective C++ --- 侯捷译

Exceptional C++ --- 卓小涛译

More Exceptional C++ --- 於春景译

深度探索C++对象模型 --- 侯捷译

泛型编程与STL --- 侯捷译

C++ STL程序员开发指南 --- 彭木根等箸

设计模式:可复用面向对象软件的元素 --- 李英军等译

C++设计新思维 --- 侯捷等译

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号