~~~~我的生活,我的点点滴滴!。

首先明白一个问题。什么是管理者模式,管理类是用来管理一组相关对象的类,他提供了訪问对象的接口,假设这么说比較抽象的话。我们来看下cocos2dx中都有哪些类是管理类你就会非常明白了,比如TextureCache, SpriteFrameCache, AnimationCache,这些类都是管理类。

      就拿SpriteFrame来说。这个类管理了对象spriteframe,我们通过提供一个键来获得相应的值。像AnimationCache,TextureCache不都是这样吗,用一个键来获取相应的值。

所以这些类都叫做管理类。由于他们管理着一组相关的对象。之所以使用管理者模式一个是由于为訪问相关对象提供了统一的接口。还有一个就是缓存游戏用到的资源,提高游戏的性能,以上的三个类不正是这种作用吗,下面是实现这个模式的代码。

#ifndef _MANAGER_PATTERN_H_
#define _MANAGER_PATTERN_H_
#include "cocos2d.h" USING_NS_CC; class ManagerPattern
{
public:
static ManagerPattern * getInstance()
{
if(m_manager == NULL)
{
m_manager = new ManagerPattern();
m_dictionary = new Dictionary();
m_dictionary->retain();
}
return m_manager;
};
static void freeInstance()
{
CC_SAFE_DELETE(m_manager);
CC_SAFE_RELEASE_NULL(m_dictionary);
};
void registeInstance(const std::string& key,CCObject *obj)
{
m_dictionary->setObject(obj,key);
};
CCObject* getObject(const std::string& key)
{
return m_dictionary->objectForKey(key);
}; private:
static ManagerPattern * m_manager;
static Dictionary * m_dictionary;
}; ManagerPattern * ManagerPattern::m_manager = NULL;
Dictionary *ManagerPattern::m_dictionary = NULL;

以上的管理者类使用了单例。内部有一个Dictionary。用来以键值对的方式存储我们的对象,訪问的时候通过一个键,返回相应的对象值,在cocos中我们仅仅须要明确那些缓存类事实上就是管理者模式就能够了。我们创建SpriteFrameCache的时候之所以提供了一个plist文件就是由于它要使用这个文件的信息来创建对象。然后依据sprite的名称来返回创建好的对象。我觉得在cocos中使用管理者模式最重要的就是提高了效率,提前缓存了我们使用的资源。

//几个管理类的使用方法。初始化都是通过键值对的方式。而获取对象则是传入一个键

    SpriteFrameCache::getInstance()->addSpriteFramesWithFile("1.plist");
auto spriteFrame = SpriteFrameCache::getInstance()->getSpriteFrameByName("test"); auto callback = [](Ref *){};
TextureCache::getInstance()->addImageAsync("test.png",callback);
auto texture2d = TextureCache::getInstance()->getTextureForKey("test.png"); AnimationCache::getInstance()->addAnimation(Animation::create(),"test");
AnimationCache::getInstance()->getAnimation("test");

上面看那个addImageAsync() 是异步载入,可是听人说在2.x 1.x的时候,整个cocos项目就是一个单线程的。假设载入大量图片,大模块时会堵塞(这有多蛋疼) ,可是大家能够进入这个函数的声明中看,是线程安全的。

浅谈cocos2dx(17) 中单例管理模式的更多相关文章

  1. 浅谈:redis的主从复制 + 哨兵模式

    浅谈:redis的主从复制 + 哨兵模式 主从模式 ​ 在谈论redis的主从复制之前,我们先回想下mysql的主从搭建过程,第一步呢首先要在主库服务器中修改my.cnf,开启一下bin_log功能, ...

  2. 浅谈cocos2dx(18) 中工厂模式

    ----我的生活.我的点点滴滴! ! cocos2d-x中也有工厂模式.何为工厂模式,顾名思义就是用来产生产品的,工厂就是用来创建其它类对象的类,我们把这个创建其它类对象的类叫做工厂类.而这些被创建的 ...

  3. 浅谈JavaScript中的内存管理

    一门语言的内存存储方式是我们学习他必须要了解的,接下来让我浅谈一下自己对他的认识. 首先说,JavaScript中的变量包含两种两种类型: 1)值类型或基本类型:undefined.null.numb ...

  4. 浅谈WCF的三种通信模式:请求响应模式、数据报模式和双工通讯模式

    一: WCF的服务端与客户端在通信时有三种模式:请求响应模式.数据报模式和双工通讯模式. 说一下基本知识,  1.如果想要将当前接口作为wcf服务器,则一定要加上[ServiceContract] 契 ...

  5. 浅谈 JS 创建对象的 8 种模式

    1.Object 模式 var o1 = {};//字面量的表现形式 var o2 = new Object; var o3 = new Object(); var o4 = new Object(n ...

  6. 好代码是管出来的——浅谈.Net Core的代码管理方法与落地(更新中...)

    软件开发的目的是在规定成本和时间前提下,开发出具有适用性.有效性.可修改性.可靠性.可理解性.可维护性.可重用性.可移植性.可追踪性.可互操作性和满足用户需求的软件产品. 而对于整个开发过程来说,开发 ...

  7. 浅谈正则表达式-PHP为例

    第一次比较系统的学习正则表达式,本篇文章以PHP语言为例来学习. 基本概念 正则表达式=普通字符(如a-z)+分隔符(正斜线(/).hash符号(#) 以及取反符号(~))+特殊字符(称为元字符) 两 ...

  8. 浅谈DAO工厂设计模式(工厂模式的好处)

    随着软件分层设计的流行及广泛的应用,对于DAO的设计模式大家已经不再陌生了,DAO层已经在软件系统的开发中成为必不可少的一层,将后台的数据层和前台的VO进行分离.前段时间也针对于DAO的设计介绍过一个 ...

  9. 【Linux】浅谈段页式内存管理

    让我们来回顾一下历史,在早期的计算机中,程序是直接运行在物理内存上的.换句话说,就是程序在运行的过程中访问的都是物理地址.如果这个系统只运行一个程序,那么只要这个程序所需的内存不要超过该机器的物理内存 ...

随机推荐

  1. MySQL-TokuDB:MySQL 高性能存储引擎:TokuDB

    ylbtech-MySQL-TokuDB:MySQL 高性能存储引擎:TokuDB 1.返回顶部 1. 在安装MariaDB的时候了解到代替InnoDB的TokuDB,看简介非常的棒,这里对ToduD ...

  2. WPF中StringToImage和BoolToImage简单用法

    在WPF的绑定控件操作中,经常会通过bool值或者某些特定的string值做出相应动作.但UI层控件的很多属性对应的都不是Bool值或者对应的只是固定的String值. 这个时候有两方法解决该问题. ...

  3. thrift RPC 框架的自我搭建

    安装thrift rpc   安装的系统是Centos 7 未成功的方法 :(原因没找到,但是还是要记录下) 安装依赖库 yum install automake libtool flex bison ...

  4. BZOJ 1443 二分图博弈 网络流

    思路: 二分图博弈嘛 找到最大匹配的必须点 跑个网络流 前后DFS一遍 //By SiriusRen #include <queue> #include <cstdio> #i ...

  5. mysql 1862 密码过期

    1.管理员权限运行命令: cmd mysqladmin -uroot -p password 修改密码. 2.设置密码永不过期. mysql 数据库\ user 表\ password_expired ...

  6. HBase编程 API入门系列之scan(客户端而言)(5)

    心得,写在前面的话,也许,中间会要多次执行,连接超时,多试试就好了. package zhouls.bigdata.HbaseProject.Test1; import javax.xml.trans ...

  7. layui新手使用

    1,首先最重要的是引入官方的layui.js  layui.css文件 2,在自己的项目中新建一个目录 再在该目录下建一个js文件,js中写入 layui.define(['layer', 'form ...

  8. 改造PAXOS算法消灭活锁

    分布式一致性协议的目的是确定一个不可变变量分布式存储的取值:通过对国内外一致性算法的研究成果和PAXOS协议活锁的分析,发现引入一个角色作为竞争时的代理提交者就可以解决活锁问题,从而在本文引入“代理提 ...

  9. 面试题-mysql

      Sql :UPDATE test SET sex = CASE sex WHEN 'm' THEN 'f' ELSE 'm' END;

  10. MongoDB_聚合

    MongoDB提供以下聚合工具来对数据进行操作:聚合框架.MapReduce以及几个简单聚合命令:count.distinct.group 聚合框架:可以使用多个构件创建一个管道,上一个构件的结果传给 ...