`

Cocos中的观察者设计模式与通知机制

c++ 
阅读更多

观察者(Observer)模式也叫发布/订阅(Publish/Subscribe)模式,是 MVC( 模型-视图-控制器)模式的重要组成部分。
天气一直是英国人喜欢讨论的话题,而最近几年天气的变化也成为中国人非常关注的话题。我会根据天气预报决定是坐地铁还是开车上班,我的女儿也会根据天气预报决定明天穿哪件衣服。于是我在移动公司为我的手机定制了天气预报短信通知服务,它的工作模型如图所示。



每天气象局将天气预报信息投送给移动运营商,移动运营商的短信中心负责把天气预报发送给定制过这项服务的手机。
在软件系统中,一个对象状态改变也会连带影响其他很多对象的状态发生改变。能够实现这一需求的设计方案有很多,但能够做到复用性强且对象之间匿名通信的,观察者模式是其中最为适合的一个。
实现原理




它有4个角色,具体如下所示。
抽象主题(Subject)。抽象主题是一个接口,它是一个观察者集合容器,定义了添加观察者(add)函数、移除观察者(remove)函数和为所有观察者发送通知的函数(notifyObserver)。
抽象观察者(Observer)。抽象观察者是一个接口,它有一个更新(update)函数。
具体观察者(ConcreteObserver)。Observer接口的具体实现。
具体主题(ConcreteSubject)。Subject接口的具体实现。
引入Subject和Observer这两个接口后,不仅提高了系统的可复用性,还降低了耦合度。因为ConcreteSubject只需要一个实例,所以我们采用单例设计模式实现。观察者模式还可以有其他变形,若要深入了解,可以参考GoF。 
通知机制
在Cocos2d-x框架中,观察者模式的具体应用有一种通知(notification)机制。通知机制与委托机制不同的是,前者是“一对多”的对象之间的通信,后者是“一对一”的对象之间的通信。
如图所示,在通知机制中对某个通知感兴趣的所有对象都可以成为接收者。首先,这些对象需要向通知中心(__NotificationCenter)调用addObserver函数进行注册,在投送对象投送通知给通知中心时,通知中心就会把通知广播给注册过的接收者。所有的接收者都不知道通知是谁投送的,更不关心它的细节。投送对象与接收者是一对多的关系。接收者如果对通知不再关注,会给通知中心调用removeObserver或removeAllObservers函数解除注册,以后不再接收通知。

在参数回传方面通知机制要比委托模式好很多。通知机制可以实现一对多参数传递,而委托模式只是一对一参数传递。

 

 

 

更多内容请关注国内第一本Cocos2d-x 3.2版本图书《Cocos2d-x实战:C++卷》
本书交流讨论网站:http://www.cocoagame.net
更多精彩视频课程请关注智捷课堂Cocos课程:http://v.51work6.com
欢迎加入Cocos2d-x技术讨论群:257760386
欢迎关注智捷iOS课堂微信公共平台

分享到:
评论

相关推荐

    Cocos2d-x设计模式.docx

    在Cocos2d-x中,观察者模式(Observer Pattern)是一个常见的行为型模式,它允许一个对象(被观察者)在状态变化时通知其他对象(观察者)。 观察者模式的核心思想是定义一个一对多的依赖关系,当一个对象的状态...

    Cocos2d-x观察者模式其实很简单!!--之游戏开发《赵云要格斗》

    观察者模式是设计模式中的一种,它定义了对象之间的一对多依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都会得到通知并自动更新。 在Cocos2d-x中,观察者模式主要通过消息机制实现,即消息调度中心`...

    c++观察者模式实例

    观察者模式(Observer Pattern)是一种行为设计模式,它允许你定义一个订阅机制,可以在对象状态改变时通知多个“观察”该对象的其他对象。在C++中,这种模式经常用于游戏开发,特别是在像cocos2d-x这样的2D游戏引擎...

    观察者模式代码demo

    总结起来,观察者模式是一种强大的设计模式,它在Cocos2d-x中的实现——`CCNotificationCenter`,使得游戏开发中对象间的通信变得更加简单。了解并熟练掌握观察者模式,将有助于提升你的Cocos2d-x项目开发效率和代码...

    在游戏开发中使用设计模式(英文)

    通过创建一个小型移动游戏项目,对游戏中遇到的问题进行识别和分析,并实际应用了若干设计模式,同时讨论了这些设计模式与其他相关技术结合使用的可能性。 总结来说,设计模式对游戏开发依然至关重要。它们不仅为...

    COCOS2D-X NotificationCenter的用法

    观察者模式是一种设计模式,它定义了对象之间的一对多依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都会得到通知并自动更新。在COCOS2D-X中,NotificationCenter就是实现这一模式的工具,它允许我们...

    Cocos2d-xGameTest

    10. **游戏框架设计**:理解"CocosTest"的整体架构和设计模式,如单例模式、观察者模式等,有助于我们构建自己的游戏框架。 总之,"Cocos2d-xGameTest"是一个很好的学习资源,通过解构和分析这个示例,可以全面了解...

    cocos2d-x2.0 射击游戏实现 沈大海cocos2d-x教程实例

    游戏的各个组件(飞机、子弹、背景等)应封装为独立的类,通过消息传递或观察者模式进行通信。同时,游戏主循环应包含更新逻辑、渲染和事件处理,确保游戏流畅运行。 六、性能优化 在实际开发中,我们还需要关注...

    cocoscreator框架

    CocosCreator的事件系统是基于观察者模式的,允许游戏对象之间通过发布(dispatch)和监听(listen)事件来通信。这包括用户输入事件、游戏逻辑事件等,使得代码结构清晰,易于维护。 六、UI系统 CocosCreator提供...

    cocos2dx 精灵触摸事件的实现

    Cocos2d-x使用了一个基于观察者模式的事件模型,包括触摸事件、键盘事件、加速器事件等。触摸事件主要分为三种类型:`EventType.TOUCH_BEGAN`(触摸开始)、`EventType.TOUCH_MOVED`(触摸移动)和`EventType.TOUCH_...

    FlappyBird游戏(源码+文档)

    开发者可能会使用到Cocos2d-x中的节点系统和动作类,这些都与设计模式密切相关。例如,组合模式可以用于构建复杂的场景结构,而代理模式则可以用于游戏对象的远程控制。 源码分析对于理解设计模式的实际应用至关...

    cocos2d的例子

    在Cocos2d中,观察者模式可以用于事件驱动编程,比如监听用户输入、网络状态变化等。通过订阅和发布事件,开发者可以确保当特定条件满足时,代码能够正确响应。 综上所述,这个“cocos2d的例子”涵盖了从基础的游戏...

    CocosCreator ScrollView 性能优化(1).pptx

    1. **CocosCreator渲染流程**:CocosCreator的渲染流程参考了观察者设计模式的思想,包括遍历场景树、处理节点transform操作等步骤。每个节点都有一个`RenderFlag`标志,决定了其在渲染过程中的行为。 2. **...

    IOS应用源码之bufordtaylor-Tower-Defense--cocos2d-e9ce9d0.zip

    "bufordtaylor-Tower-Defense"可能采用了面向对象的设计,如工厂模式创建防御塔,策略模式处理不同类型的敌人,以及观察者模式实现游戏状态的更新通知。 最后,性能优化是任何游戏开发都不能忽视的部分。Cocos2d-...

    iOS实例开发源码——jotaeme1212-Ejemplos-en-Cocos2D-320a463.zip

    9. **设计模式**:源代码可能运用了MVC(模型-视图-控制器)、观察者模式等设计模式,有助于开发者学习如何在iOS和Cocos2D项目中组织代码,提高代码的可读性和可维护性。 总之,这个压缩包提供的源代码示例是一个...

    iOS游戏应用源代码——iOS-Gamer-Cocos2D-86714e3.zip

    这部分涉及到编程逻辑设计,可能包括面向对象的设计模式,如观察者模式、状态模式等。 5. **动画与视觉效果**:Cocos2D提供了强大的动画功能,源代码中可能包含了精灵(Sprite)动画、序列帧动画、过渡效果等。这些...

    iOS游戏应用源代码——Devint6669-cocos2d-iphone-bedca97.zip

    例如,观察者模式在事件处理中的应用,单例模式在全局资源管理中的使用。同时,游戏开发通常涉及到多线程编程,理解GCD(Grand Central Dispatch)或其他并发技术在游戏更新循环中的作用也很重要。 总之,通过分析...

    IOS应用源码之【游戏】-Pusher_使用cocos2d_源码_游戏.zip

    7. **游戏设计模式**:游戏开发常使用如状态机、观察者、工厂等设计模式,通过学习源码,可以理解这些模式在实际项目中的应用。 8. **资源管理**:游戏中的图像、音频、动画等资源的加载、缓存和释放也是关键。了解...

    iOS游戏应用源代码——manucorporat-CCNotifications-887289f.zip

    通过阅读源码,我们可以学习如何设计模块化的代码结构,以及如何利用设计模式如单例、工厂、观察者等来提升代码质量。 通过研究这个开源项目,开发者不仅能了解游戏通知系统的实现,还能掌握Cocos2d-x的使用技巧,...

    coco2d源码qipai(棋牌源码全套+PSD设计文件)

    优秀的源代码往往融入了各种设计模式,如工厂模式、观察者模式等。这些设计模式不仅能提高代码的复用性和可扩展性,还能增强代码的可读性和维护性。 综上所述,这套包含完整源代码和PSD设计文件的Cocos2d棋牌游戏...

Global site tag (gtag.js) - Google Analytics