cocos2dx[2.x](23)--单例模式

【唠叨】

单例模式,说的通俗一点就是:创建某个类的全局唯一静态实例对象。也就是说从它创建开始,一直到整个游戏程序结束才会释放资源,期间一直保存的着数据。
单例类在大部分游戏中应该是必不可少的部分,如整个游戏音乐的开关控制、数据的加载与存储等都需要一个全局访问点来控制,那就需要用到单例类了。

【致谢】
http://blog.csdn.net/star530/article/details/22610229

【3.x】

shared***() 改为 getInstance() 。

【单例模式】

有一个很形象的比喻,摘自:http://blog.csdn.net/star530/article/details/22610229

假如你是一个男的,但是你私生活不能自理:不会煮饭,洗衣服,穿的衣服永远都no fashion。

这时候你需要什么?没错,需要一个女朋友!但这个女朋友你该怎么“使用”呢?

给你以下两种选择:

(1)要洗衣服的时候“创建”一个女朋友(也就是去找一个女朋友),洗完后将女朋友甩了;

     当你要做饭,继续“创建”一个女朋友,做完后甩掉;

     甚至是当你需要满足某种不可告人的需求时,你需要“创建”一个女朋友...然后...

(2)找一个可以过一辈子的女朋友,永远在一起,你若不离,她便不弃!

     想怎么用就怎么用,省去了相亲等一系列麻烦!

以上两种方法虽然都可以让你告别你的右手,但是第一种方法的前提条件太夸张了:你要是一个高富帅,像博主这样的,呵呵呵呵。

所以,还是选第二种吧,也就是我们所说的单例模式,你想甩也甩不掉。

1、cocos2dx中的单例模式

cocos2dx中其实存在很多的单例类,相信大家也都接触过。

例如:CCDirector、SimpleAudioEngine、CCUserDefault、CCSpriteFrameCache等都是用了单例模式,并可以通过shared***()来获取单例对象,如CCDirector::sharedDirector()。

2、创建单例类

2.1、声明.h
    class Global : cocos2d::CCObject {

    private:
        static Global* m_global;      //唯一静态实例对象m_global

    public:
        static Global* shareGlobal(); //获取全局访问点m_global

    //其他属性函数的声明
    //......
    };
2.2、定义实现.cpp
    //初始化单例唯一实例对象m_global
    Global* Global::m_global = NULL;

    //获取全局访问点
    Global* Global::shareGlobal() 
    {
        //判断m_global是否已被实例化,如果没有,将之实例  
        if(m_global == NULL) {
            m_global = new Global();
        }
        return m_global;
    }

    //其他函数的定义实现
    //......

转载网址:http://blog.51cto.com/shahdza/1548273

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值