cocos2d-js 实现观察者模式

原创 2016年08月30日 10:31:18

1. 手动管理观察者listenerName

2. 确保只有注册过的才能下发事件

3. 当前模式只支持唯一观察者listenerName,不支持共享

4. 在切换到登录界面时要清空所有listener

HelpTool._listenerList = {};

HelpTool.setListenerFlag = function(listenerNameTable, flag) {
    for (var i = 0; i < listenerNameTable.length; i++) {
        if (flag == false && HelpTool._listenerList[listenerNameTable[i]]) {
            cc.eventManager.removeCustomListeners(listenerNameTable[i]);
        }
        HelpTool._listenerList[listenerNameTable[i]] = flag;
        cc.log("xiaohei " + (flag ? "enable" : "disable") + " listener id: " + listenerNameTable[i]);
    }
};

HelpTool.disableAllListeners = function() {
    for (var k in HelpTool._listenerList) {
        HelpTool._listenerList[k] = false;
        cc.eventManager.removeCustomListeners(k);
        cc.log("xiaohei set and remove all listeners flag is false " + k);
    }
};

HelpTool.dispatchListener = function(listenerName, patchdata) {
    if (HelpTool._listenerList[listenerName]) {
        cc.log("xiaohei dispatch listener id: " + listenerName);
        var dataTable = patchdata || {};
        cc.eventManager.dispatchCustomEvent(listenerName, dataTable);
    } else {
        cc.log("xiaohei listener the " + listenerName + " flag is " + HelpTool._listenerList[listenerName]);
    }
};

注册:

onExit: function() {
    HelpTool.setListenerFlag(["msg_superstar_currency_change", "msg_superstar_state_change"], false);
},

init: function() {
    // xiaohei add listener
    cc.eventManager.addCustomListener("msg_superstar_currency_change", function(args) {
        this.updateMoneyNum();
    }.bind(this));
    cc.eventManager.addCustomListener("msg_superstar_state_change", function(args) {
        this.onUpdateState();
    }.bind(this));
    HelpTool.setListenerFlag(["msg_superstar_currency_change", "msg_superstar_state_change"], true);
},

下发:

HelpTool.dispatchListener("msg_superstar_currency_change");


注销:(主城的onExit中调用)

onExit: function () {
    cc.AudioEngine.getInstance().stopMusic("res/audio/bgm/BGM_mainui_1.mp3");
    this._super();

    HelpTool.disableAllListeners();
    cc.log("#### HomeScene on exit");
}

版权声明:本文为博主原创文章,未经博主允许不得转载。

用java代码实现观察者模式

/* 用java代码实现观察者模式, 前台负责观察老板在办公室还是离开并通知大家, 用观察者模式实现这一过程,请实现Guard类。 使最终输出结果为: “老板在办公室”   “前台通知大家:老板离开了...
  • zh521zh
  • zh521zh
  • 2015年11月17日 22:29
  • 1030

JavaScript设计模式--观察者模式

一、定义观察者模式(发布-订阅模式):其定义对象间一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都将得到通知。 在JavaScript中,一般使用事件模型来替代传统的观察者模式...
  • ligang2585116
  • ligang2585116
  • 2015年12月20日 19:22
  • 5122

原生JavaScript实现观察者模式

什么是观察者模式维基百科对观察者模式的定义如下: 观察者模式是软件设计模式的一种。在此种模式中,一个目标对象管理所有相依于它的观察者对象,并且在它本身的状态改变时主动发出通知。这通常透过呼叫各观察...
  • lm278858445
  • lm278858445
  • 2017年10月19日 17:37
  • 451

【js设计模式笔记---观察者模式】

观察者模式 又称发布—订阅者(publisher-subscriber模式),这是一种多对多的关系,需要一种高级的抽象策略,以便订阅者能够彼此独立地发生改变,而发行方能够接受任何有消费意向的订阅者。...
  • pigpigpig4587
  • pigpigpig4587
  • 2014年05月22日 14:39
  • 3411

Qt-观察者模式

1.观察者模式 Observer     首先根据字面意思肯定知道有  观察者 和 被观察者。 根据模式规定,这是一个一对多的依赖关系。 当被观察者更新状态,并且发出通知 观察者,观察者做...
  • c3060911030
  • c3060911030
  • 2016年07月17日 03:01
  • 3105

多线程下的观察者模式--Java实现

按照我的理解,观察者模式使用的场景:假如现在有一个土匪,绑架了一名重要人质,目前躲在一个楼房里,楼房四周已经被警察包围,还有特种部队,狙击手。观察者模式是这样运作的:目前场景中的观察者是:警察、防暴队...
  • huiguimoyu
  • huiguimoyu
  • 2017年07月31日 23:24
  • 743

观察者模式的应用:模拟MVC架构的实现

mvc架构是安卓的经典架构模式,它是观察者模式的一个典型应用场景。今天我就用java程序来简单模拟mvc架构的实现。首先,简单说下什么是mvc架构。 mvc架构由model,view和control...
  • hyhdcl
  • hyhdcl
  • 2016年11月19日 21:32
  • 409

观察者模式之Scala实现

Head First Design Pattern 书中第二章讲解了”观察者”模式的用法, 书中实例(气象台)是java写的. 这里用scala实现一下, 其中差异还是挺明显的.scala一直强调:...
  • zrc199021
  • zrc199021
  • 2016年06月27日 16:24
  • 518

用 spring 实现观察者设计模式

传统观察者设计模式编写方法:    发布者类:Publisher.java  import java.util.ArrayList;  import java.util.Iterator;  impo...
  • gzjoek
  • gzjoek
  • 2006年04月14日 17:18
  • 3724

观察者模式(C语言实现)

一. 概述 Observer 模式要解决的问题为:建立一个一(Subject)对多(Observer)的依赖关系,并且做到当“一”变化的时候,依赖这个“一”的多也能够同步改变。 Sbuject...
  • HMSIWTV
  • HMSIWTV
  • 2014年09月27日 12:31
  • 3959
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:cocos2d-js 实现观察者模式
举报原因:
原因补充:

(最多只允许输入30个字)