观察员(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://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课堂微信公共平台
版权声明:本文博客原创文章,博客,未经同意,不得转载。