| 首页 | 新闻 | 网页 | 设计 | 色彩 | 原创 | 视觉 | 素材 | 动漫 | 酷站 | 策划 | 文案 | 访谈 | 运营 | 编程 | 数据库 | 服务器 | 下载 | 图库 | 
您的位置: 幽幽天空 > 网页 > 编程开发 > Visual C++教程 > 文章正文 用户登录
TOM ULINK新闻联盟
TinyURL免费缩短网
苏能科技100M/FTP
Flash Remoting -
flashremoting实践
Loading制作之 计
Flash8 Remoting 
再探FlashCom的HT
使用 Flash Remot
Flash里的 A* Pat

对Singleton使用方法的总结           

对Singleton使用方法的总结

作者:佚名 来源:不详 更新:2006-8-25 21:05:35 错误报告 我要投稿
     Design Pattern无疑是每个程序员都应该阅读的一本书,这本书给出了23个Pattern,其中最简单的就是Singleton Pattern了,这里,我大概介绍一下自己使用Singleton时曾经用到过的一些做法,希望对大家有些帮助。

     意图
     Single Pattern的主要是为了保证类仅有一个实例,并保证提供一个访问它的全局访问点

     适用情况
     一个对象的行为取决于它的状态,并且它必须在运行时改变它的状态
     一个操作包含庞大的Switch&Case语句

     优点
     它将和特定状态相关的行为局部化了,这样就可以通过定义新的子类来增加新的状态和转换。

做法1:

因为在书中并没有提及如何删除m_pInstance指针,所以就提供exitInstance()方法手动删除

class CSingleton 
{
public:
   virtual ~CSingleton();

  static CSingleton* instance(void)
  {
       if(NULL == m_pInstance)
               return m_pInstance = new CSingleton;
       return m_pInstance;
   }

   void exitInstance(void)

   { delete m_pInstance;}

private

    CSingleton();

    static T* m_pInstance;

}

CSingleton* CSingleton::m_pInstance = NULL;

 

做法2:

在类中增加一个嵌套类,让这个嵌套类负责删除m_pInstance(类似于auto_ptr的原理)

class CSingleton
{
public:
    virtual ~CSingleton();
    static CSingleton* Instance()
    {
        if(NULL == m_pInstance)
              m_pInstance = new CSingleton;
        return m_pInstance;
    }
private:
    CSingleton();
    static CSingleton* m_pInstance;
    class Cleaner
    {
    public:
         ~Cleaner()
         { delete m_pInstance;}
    }
    friend class CSingleton::Cleaner;
    static CSingleton::Cleaner cleaner;
}

CSingleton *CSingleton::m_pInstance = NULL;
CSingleton::Cleaner CSingleton::cleaner;

 

做法3:

使用template的特性,建一个关于Singleton的template class,任何想使用Singleton Pattern的类只需要从它这里继承就可以了

template <typename T>
class CSingleton 
{
public:
 static T* instance(void)
 {
  static T instance;
  return &instance;
 }

protected:
 CSingleton(){};
 virtual ~CSingleton(){};

private:
    CSingleton(const CSingleton& source){};
};

如果类CTest想使用Singleton特性

CTest : public CSingleton<CTest>

{

    friend CSingleton<CTest>;

    CTest();

public:

    ~CTest();

}

目前我用的就是最后一种方法,用起来比较方便,不用对每个需要使用类似技巧的类都写一大堆代码。

希望对大家有所帮助

文章录入:skyuu    责任编辑:skyuu 
  • 上一篇文章:

  • 下一篇文章:
  • 【字体: 】【发表评论】【加入收藏】【告诉好友】【打印此文】【关闭窗口
    网友评论:(只显示最新10条。评论内容只代表网友观点,与本站立场无关!)
    发表评论:
    姓名:  评 分: 1分 2分 3分 4分 5分
     
  • 严禁发表危害国家安全、政治、黄色淫秽等内容的评论。
  • 用户需对自己在使用幽幽天空服务过程中的行为承担法律责任。
  • 本站管理员有权保留或删除评论内容。
  • 评论内容只代表机友个人观点,与本网站立场无关。