细说Singleton模式1.ppt

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
细说Singleton模式1.ppt

细说Singleton模式 创建、多线程与销毁 一  GOF着作中对Singleton模式的描述为:保证一个class只有一个实体(Instance),并为它提供一个全局访问点(global access point)。   从其描述来看,是非常简单的,但实现该模式却是复杂的。Singleton设计模式不存在一种所谓的“最佳”方案。需要根据当时的具体问题进行具体解决,下面将讲述在不同环境下的解决方案。   Singleton的详细解释,请大家看GOF的着作《设计模式》一书。俺比较懒,是不想抄了。   1.Singleton创建   1.1 GOF Singleton   在GOF着作中对Singleton模式的实现方式如下:   1./*解一*/   2.class Singleton   3.{ 4.public:   5.static Singleton *Instance(){ //1   6.if( !m_pInstatnce) //2   7.m_pInstance = new Singleton;//3   8.return m_pInstance; //4   9.}   10.private:   11.static Singleton *m_pInstatnce; //5 12.private:   13.Singleton(); //6   14.Singleton(const Singleton); //7   15.Singleton operator=(const Singleton); //8   16.~Singleton(); //9   17.}   18.Singleton *Singleton:m_pInstatnce = NULL; //10  19.   在上面的解决方案中,我们只在需要调用时,才产生一个Singleton的对象。这样带来的好处是,如果该对象产生带来的结果很昂贵,但不经常用到时,是一种非常好的策略。但如果该Instance被频繁调用,那么就有人觉得Instance中的判断降低了效率(虽然只是一个判断语句^_^),那么我们就把第5条语句该为   20.static Singleton m_Instatnce;   如此一来,在Instatnce直接返回m_Instance,而不用做任何判断,效率也高了。(是不是呢?)   这样修改后,我们将带来灾难性的后果: 1:首先有可能编译器这关就没法通过,说m_Instance该外部变量无法解决(visural C++6.0)   21.error LNK2001: unresolved external symbol private: static class Singleton Singleton::m_Instance (?m_Instance@Singleton@@0V1@A)   2:如果编译器这关通过了就没问题了么?答案是否定的。   第一是不管Instance是否用到,该静态变量对象在编译器编译时就产生了,即资源消耗是不可避免的;   第二是无法确保编译器一定先将m_Instance初始化。所以Instance的调用有可能传回一个尚没构造的Singleton对象。这也意味着你无法保证任何外部对象所使用的m_Instance是一个被正确初始化的对象。  1.2 Meyers Singleton   我们如何解决这个问题呢,实际上很简单。一种非常优雅的做法由Scott Meyers最先提出,故也称为Meyers Singleton。它依赖编译器的神奇技巧。即函数内的static对象只在该函数第一次执行时才初始化(请注意不是static常量)。   22./*解二*/   23.class Singleton   24.{   25.public:   26.static Singleton *Instance(){ //1   27.static Singleton sInstance; //2   28.return sInstance; //3 29.}   30.private:   31.Sing

文档评论(0)

wsh1288 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档