Cocos观察者设计模式和通报机制

观察员(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函数解除注冊,以后不再接收通知。

在參数回传方面通知机制要比托付模式好非常多。通知机制能够实现一对多參数传递。而托付模式仅仅是一对一參数传递。

很多其它内容请关注最新Cocos图书《Cocos2d-x实战 C++卷》?

本书交流讨论站点:http://www.cocoagame.net

很多其它精彩视频课程请关注智捷课堂Cocos课程:http://v.51work6.com

欢迎加入Cocos2d-x技术讨论群:257760386

?

《Cocos2d-x实战 C++卷》现已上线,各大商店均已开售:?

京东:http://item.jd.com/11584534.html

亚马逊:http://www.amazon.cn/Cocos2d-x%E5%AE%9E%E6%88%98-C-%E5%8D%B7-%E5%85%B3%E4%B8%9C%E5%8D%87/dp/B00PTYWTLU

当当:http://product.dangdang.com/23606265.html

互动出版网:http://product.china-pub.com/3770734?

《Cocos2d-x实战 C++卷》源代码及样章下载地址:

源代码下载地址:http://51work6.com/forum.php?mod=viewthread&tid=1155&extra=page%3D1

样章下载地址:http://51work6.com/forum.php?mod=viewthread&tid=1157&extra=page%3D1 ?

欢迎关注智捷iOS课堂微信公共平台

版权声明:本文博客原创文章,博客,未经同意,不得转载。

时间: 2024-10-05 18:06:05

Cocos观察者设计模式和通报机制的相关文章

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

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

Java事件监听机制与观察者设计模式

一. Java事件监听机制 1. 事件监听三要素: 事件源,事件对象,事件监听器 2. 三要素之间的关系:事件源注册事件监听器后,当事件源上发生某个动作时,事件源就会调用事件监听的一个方法,并将事件对象传递进去,开发者可以利用事件对象操作事件源. 3. 入门程序 1 /** 2 * Created by IntelliJ IDEA. 3 * 4 * @Auther: ShaoHsiung 5 * @Date: 2018/8/29 21:25 6 * @Title: 事件监听入门程序 7 * @D

观察者设计模式 Vs 事件委托(java)

观察者设计模式 Vs 事件委托 转载请注明原博客地址: http://blog.csdn.net/gdutxiaoxu/article/details/51824769 源码下载地址: http://download.csdn.net/detail/gdutxiaoxu/9567209 本篇博客主要讲解一下几个问题 什么是观察者模式 观察者模式的优缺点 如何看待观察者模式的缺点 事件的委托 什么是观察者模式 简单来说,当有多个观察者想同时观察同一个主题对象的时候,当主题对象的 状态发生变化,观察

iOS常用设计模式——观察者设计模式

观察者设计模式详解 观察者设计模式详解 基本概念 NSNotificationCenter的使用 添加监听 接收消息 删除监视 KVO的使用 基本概念 注册观察者 观察者对象发生变化时的回调方法 remove观察者身份 代码实现 基本概念 观察者模式定义了一种一对多的依赖关系,让多个观察者对象同时监听某一个主题对象.这个主题对象在状态发生变化时,会通知所有观察者对象,使它们能够自动更新自己.而在IOS开发中我们可能会接触到的经典观察者模式的实现方式,有这么几种:NSNotificationCen

观察者设计模式

/** * 事件接口即被观察者 * * @author Host * */ publicinterface Event { void attach(Listener listener); void detach(Listener listener); void notifyListener(); } /** * 事件监听者观察者 * * @author Host * */ publicinterface Listener { void execute(); } 事件源的一个实现类(磁盘事件) p

(java)从零开始之--观察者设计模式Observer

观察者设计模式:时当一个对象发生指定的动作时,要通过另外的对象做出相应的处理. 步骤: 1. A对象发生指定的动作是,要通知B,C,D...对象做出相应的处理,这时候应该把B,C,D...对象针对A对象的动作做出的相应处理方法定义在接口上(这是一种规范,凡事需要A对象通知的对象,都要实现该接口). 2. 在A对象维护接口的引用,当A对象发生指定的动作这时候即可调用接口中的方法. 观察者模式的应用场景: 1. 对一个对象状态的更新,需要其他对象同步更新,而且其他对象的数量动态可变. 2.对象仅需要

监听器和 利 用观察者设计模式设计一个程序

一.监听器概念 1.事件源:发生事件的对象. 2.监听器:是一个接口,监听事件源上要发生的动作 3.事件:事件对象一般是作为监听器方法的参数存在的,它封装了发生事件的对象 二.Servlet中提供的监听器(8个) 八个监听器分类: 2.1监听ServletContext.HttpSession.ServletRequest对象的创建和销毁的监听器. ServletContextListener:监听ServletContext对象的创建和销毁. HttpSessionListener:监听Htt

设计模式: 自己手动实现一个观察者设计模式

观察者模式: 定义了对象之间的一对多依赖,这样一来.当一个对象(被观察者)改变状态时,它的全部依赖者(观察者)都会收到通知并自己主动更新. 在观察者模式中,会改变的是主题的状态,以及观察者的数目和类型. 用这个模式, 你能够改变依赖主题状态的对象.却不必改变主题.这叫提前规划. 主题和观察者都使用接口:观察者利用主题的接口向主题注冊.而主题利用观察者的接口通知观察者.这样能够让两者之间运作正常,有同一时候具有松耦合的长处. 观察者模式利用"组合"将很多观察者组合进主题中.对象之间的这样

JS观察者设计模式:实现iframe之间快捷通信

观察者设计模式又称订阅发布模式,在JS中我们习惯叫做广播模式,当多个对象监听一个通道时,只要发布者向该通道发布命令,订阅者都可以收到该命令,然后执行响应的逻辑.今天我们要实现的就是通过观察者设计模式,实现iframe之间的通信. 一.top对象 一般的JS书里都会在讲框架集的时候讲top,这会让人误解,认为top对象只是代表框架集,其实top的含义应该是说浏览器直接包含的那一个页面对象,也就是说如果你有一个页面被其他页面以iframe的方式包含了,无论包含的层级是什么,都可以用top访问最外层的