【从cocos2d-x学习设计模式】第一阶段:辛格尔顿

设计模式,它总结了前辈在许多方案重用代码。它是一个想法。

因为我们爱cocos2d-x,然后我们从去cocos2d-x在设计模式中,右一起学习!本篇解释未来辛格尔顿。

提cocos2d-x中间Director。我相信你应该很熟悉,使用就是利用了单例模式。


1. 什么是单例模式


单例模式是一种经常使用的软件设计模式。在它的核心结构中仅仅包括一个被称为单例类的特殊类。通过单例模式能够保证系统中一个类仅仅有一个实例并且该实例易于外界訪问,从而方便对实例个数的控制并节约系统资源。假设希望在系统中某个类的对象仅仅存在一个,单例模式是最好的解决方式。


2. 实例代码


看完上面的概念,会不会有点模糊呢?没事,咱们来看一段单例模式最主要的代码。

public class Singleton
{
public:

//全局訪问点
static Singleton* Singleton::getInstance()
{
   if(!m_Singleton)
  {
     m_Singleton = new Singleton();
   }
   return m_Singleton;
}

private:

//静态变量实例
static Singleton* m_Singleton = NULL;

//构造函数初始化
Singleton(); 

}

3. 深入分析


(1)因为每次使用newkeyword来实例化Singleton类时,都会产生一个新对象,为了保证Singleton实例的唯一性。我们须要禁止类的外部直接使用new来创建对象,因此将Singleton的构造函数的可见性设为private。


(2)类外部无法使用new来创建对象,我们须要在Singleton的内部创建,可见性仅仅对类外有效。因此。我们能够在Singleton中创建并保存这个唯一实例。为了让外界能够訪问这个唯一实例。须要在Singleton中定义一个静态的Singleton类型的私有成员变量。


(3)为了保证成员变量的封装性,我们将Singleton类型的m_Singleton对象的可见性设置为private。为了让外界使用该成员变量以及实例化该成员变量。我们须要设置一个公有的静态方法。


4. 单例模式在cocos2d-x的Director中的体现


我们来看一下Director用到单例模式的源码:

static DisplayLinkDirector *s_SharedDirector = nullptr;
Director* Director::getInstance()
{
    if (!s_SharedDirector)
    {
        s_SharedDirector = new DisplayLinkDirector();
        s_SharedDirector->init();
    }

    return s_SharedDirector;
}


有兴趣的小伙伴。能够去查看一下Director的源码,性质上是一样的。

当然不止Director中用到了单例模式,TextureCache,SpriteFrameCache等等也用途。



版权声明:本文博客原创文章。博客,未经同意,不得转载。

posted @ 2015-08-07 09:44  hrhguanli  阅读(317)  评论(0编辑  收藏  举报