加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

观察者工具类NotificationUtil

发布时间:2020-12-16 07:47:27 所属栏目:百科 来源:网络整理
导读:今天PHP站长网 52php.cn把收集自互联网的代码分享给大家,仅供参考。 1. .h文件#ifndef _NotificationUtil_H_#define _NotificationUtil_H_#include "cocos2d.h"using namespace cocos2d;using namespace std;class Notif

以下代码由PHP站长网 52php.cn收集自互联网

现在PHP站长网小编把它分享给大家,仅供参考

1.   .h文件

#ifndef _NotificationUtil_H_
#define _NotificationUtil_H_
#include "cocos2d.h"
using namespace cocos2d;
using namespace std;
class NotificationUtil : public Ref
{
public:
virtual bool init();
CREATE_FUNC(NotificationUtil);
static NotificationUtil * getInstance();//实现单例


//订阅消息
void addObserver(const std::string &sMsgName,std::function<void(Ref*)>func);


//发布消息
void postNotification(const std::string & sMsgName,Ref * data);
private:
static NotificationUtil * m_NotifiactionUtil;


std::map<std::string,std::vector<std::function<void(Ref*)>>> m_funcMap;


};
#endif

2.  .cpp

#include "NotificationUtil.h"
NotificationUtil * NotificationUtil::m_NotifiactionUtil = NULL;
bool NotificationUtil::init()
{
return true;
}


NotificationUtil * NotificationUtil::getInstance()
{
if (m_NotifiactionUtil == NULL)


{
m_NotifiactionUtil = NotificationUtil::create();
m_NotifiactionUtil->retain();
}
return m_NotifiactionUtil;
}


void NotificationUtil::addObserver(const std::string &sMsgName,std::function<void(Ref*)>func)
{
//查找是否有已经存在该消息的回调列表
if (m_funcMap.find(sMsgName)!=m_funcMap.end())
{
//已经存在该回调列表(换句话说,已经有人订阅过同样的消息)
std::vector<std::function<void(Ref*)>> & funcList = m_funcMap.at(sMsgName);


funcList.push_back(func);
}
else
{
//不存在该回调列表,表示没有人订阅过这种消息,新建一个列表
std::vector<std::function<void(Ref *)>> funcList;


//将新的订阅者添加到回调列表里
funcList.push_back(func);


//将新建的列表保存到map中


m_funcMap[sMsgName] = funcList;


}


}


void NotificationUtil::postNotification(const std::string & sMsgName,Ref * data)
{
//查找是否有人订阅过此消息
if (m_funcMap.find(sMsgName) != m_funcMap.end())
{
//获取回调列表
std::vector<std::function<void(Ref*)>> funcList = m_funcMap.at(sMsgName);
//遍历列表,回调函数,并保存数据
for (auto func:funcList)
{
func(data);
}
}
}

以上内容由PHP站长网【52php.cn】收集整理供大家参考研究

如果以上内容对您有帮助,欢迎收藏、点赞、推荐、分享。

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读