【从cocos2d-x中学习设计模式】第一期:单例模式

来源:互联网 发布:淘宝修改地址在哪里 编辑:程序博客网 时间:2024/04/28 13:35

设计模式,是经前辈在大量程序中总结出来可以重用的代码,也是一种思想。

既然我们钟爱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)由于每次使用new关键字来实例化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等等也用到了。



0 0
原创粉丝点击