展会信息港展会大全

Cocos中的观察者设计模式与通知机制,cocos观察者
来源:互联网   发布日期:2015-09-28 15:34:16   浏览:1065次  

导读: Cocos中的观察者设计模式与通知机制,cocos观察者 观察者(Observer)模式也叫发布/订阅(Publish/Subscribe)模式,是 MVC( 模型-视图-控制器)模式的重要组成...

Cocos中的观察者设计模式与通知机制,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函数解除注册,以后不再接收通知。

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

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

JAVA 异步观察者模式 的源代码(完整的),不要同步的,好的给加分

package TestObserver;import java.util.Iterator;import java.util.Vector;/** * * @author Seastar */interface Observed {public void addObserver(Observer o);public void removeObserver(Observer o);public void update();}interface Observer {public void takeAction();}class Invoker {private Observer o;Handler handler;public Invoker(Observer o) {new Handler();this.o = o;}private class Handler extends Thread {public Handler() {handler = this;}@Overridepublic void run() {o.takeAction();}}public boolean TestSameObserver(Observer o) {return o == this.o;}public void invoke() {handler.start();}}class ObservedObject implements Observed {private Vector<Invoker> observerList = new Vector<Invoker>();public void addObserver(Observer o) {observerList.add(new Invoker(o));}public void removeObserver(Observer o) {Iterator<Invoker> it = observerList.iterator();while (it.hasNext()) {Invoker i = it.next();if (i.TestSameObserver(o)) {observerList.remove(i);break;}}}public void update() {for (Invoker i : observerList) {i.invoke();}}}class ObserverA implements Observer {public void takeAction()......余下全文>>

赞助本站

人工智能实验室

相关热词: android开发 应用开发

AiLab云推荐
展开

热门栏目HotCates

Copyright © 2010-2024 AiLab Team. 人工智能实验室 版权所有    关于我们 | 联系我们 | 广告服务 | 公司动态 | 免责声明 | 隐私条款 | 工作机会 | 展会港