观察者模式在Foundation框架通知中的应用
1.何为观察者模式?
观察者设计模式定义了对象间的一种一对多的依赖关系,以便一个对象的状态发生变化时,所有依赖于它的对象都得到通知并自动刷新。
举个简单的例子:你和你的舍友都订阅了同一个公众号,你和舍友就是观察者,而这个公众号就是观察对象。作为观察者,你不需要每时每刻都盯着这个公众号看,观察是否有新的消息;当这个公众号有新的消息时,即当它的状态改变时,它会主动通知你们,你们也会自动收到新的消息。你想收到这个公众号的消息,你必须得订阅它,即注册成为它的观察者;如果你不想再收到这个公众号的消息,取关就行,即移除你这个观察者。
2.观察者模式在Foundation框架中的实现原理?
(1)创建Subject
将发送消息的称为Subject,通知的观察者称为Observer。下方是通知的Subject的实现,下方的Boss扮演的就是Subject角色。如果Boss要发送通知的话,需要以下几步:
- 创建消息字典,该字典承载的就是观察着所获取的信息。
- 创建通知(NSNotification),该通知也是要发送给Observer的。通知中的信息量更大,其中包括发出通知的Subject的名字(每个Subject都有一个名字),还包括发送通知的对象,以及我们创建的消息字典。
- 将该通知发送给“通知中心”----NotificationCenter,NotificationCenter会根据Notification所承载的信息来找到观察此通知的所有Observers,并把该Notification传给每个观察者。

代码的具体实现
(2)添加Observer
在添加Observer时,我们要指定该观察者所观察的是哪一个Subject。这也就是为什么要为Subject命名了,在添加Observer时就是通过Subject的名字来指定其观察的对象的。除了指定观察对象外,还需要指定收到通知后所执行的方法。在指定的方法中需要有一个参数,该参数就是用来接收上方Subject所发出的NSNotification的对象的。

代码的具体实现
3.观察者模式的应用场景:
- 对一个对象状态的更新,需要其他对象同步更新,而且其他对象的数量动态可变;
- 对象仅需要将自己的更新通知给其他对象而不需要知道其他对象的细节。
4.使用观察者模式在该项目中的好处:
- 松耦合,被观察者并不认识任何一个具体观察者,它只知道它们都有一个共同的接口,增强程序的可扩展性。
- 支持广播通讯,保证观察者对象行动的一致性。
观察者模式在Foundation框架通知中的应用的更多相关文章
- (转载)OC学习篇之---Foundation框架中的其他类(NSNumber,NSDate,NSExcetion)
前一篇说到了Foundation框架中的NSDirctionary类,这一一篇来看一下Foundation的其他常用的类:NSNumber,NSDate,NSException. 注:其实按照Java ...
- (转载)OC学习篇之---Foundation框架中的NSDirctionary类以及NSMutableDirctionary类
昨天学习了Foundation框架中NSArray类和NSMutableArray类,今天来看一下Foundation框架中的NSDirctionary类,NSMutableDirctionary类, ...
- (转载)OC学习篇之---Foundation框架中的NSArray类和NSMutableArray类
在之前的一篇文章中介绍了Foundation框架中的NSString类和NSMutableString类,今天我们继续来看一下Foundation框架中的NSArray类和NSMutableArray ...
- (转载)OC学习篇之---Foundation框架中的NSString对象和NSMutableString对象
在之前的一篇文章中我们说到了Foundation框架中的NSObject对象,那么今天在在来继续看一下Foundation框架中的常用对象:NSString和NSMutableString. 在OC中 ...
- (转载)OC学习篇之---Foundation框架中的NSObject对象
前一篇文章讲到了OC中的代理模式,而且前几篇文章就介绍了OC中的类相关知识,从这篇文章开始我们开始介绍Foundation框架. OC中的Foundation框架是系统提供了,他就相当于是系统的一套a ...
- OC中Foundation框架之NSString、NSMutableString
创建方式 )直接赋值 NSString *str =@"abc"; )创建对象 NSString *str2 = [[NSString alloc]init]; str2 =@&q ...
- OC中Foundation框架
框架的概念 框架是由许多类.方法.函数.文档按照一定的逻辑组织起来的组合,以便使研发程序变的更容易在OS X下地Mac操作系统中大约有80个框架为所有程序开发奠定基础的框架称为Foundation框架 ...
- Swift:Foundation框架中的NS前缀的由来
可能大家对于著名的NS前缀的由来有一些疑问. 绝大多数这些NS前缀的类是NeXTSTEP操作系统中Foundation框架里的一部分,而该操作系统是OS X的基础. NeXTSTEP的程序员对它们的类 ...
- Foundation框架中的NSNumber对象详解
到目前为止,我们所讨论过的所有数字数据类型,如int型.float型和long型都是Objective-C语言中的基本数据类型,也就是说,它们都不是对象.例如,不能向它们发送消息.然而,有时需要作为对 ...
随机推荐
- git基础之创建ssh公钥和密钥
用git管理过程中,不想每次输入username和password.解决的方法例如以下; 1 . 链接换成ssh协议. 2 . 生成公钥. 3. 加入ssh公钥到gitserver. 打开gitbas ...
- dorker 安装
http://www.docker.org.cn/book/install/install-docker-win7-win8-requirements-38.html1. 你先去下载Docker To ...
- 对json的爱恨情仇
本文回想了对json的爱恨情仇. C++有风险,使用需慎重. 本文相关代码在:http://download.csdn.net/detail/baihacker/7862785 当中的測试数据不在里面 ...
- HNOI模拟 Day3.22
第一题: 盾盾的打字机 (drdrd) [题目描述] 盾盾有一个非常有意思的打字机,现在盾哥要用这台打字机来打出一段文章. 由于有了上次的经验,盾盾预先准备好了一段模板 A 存在了内存中,并以此为基础 ...
- RK3288][Android6.0] 调试笔记 --- 关闭按键音后无法录音问题【转】
本文转载自:http://blog.csdn.net/kris_fei/article/details/70052413 Platform: ROCKCHIPOS: Android 6.0Kernel ...
- Array.Copy vs Buffer.BlockCopy
http://stackoverflow.com/questions/1389821/array-copy-vs-buffer-blockcopy Since the parameters to Bu ...
- Python之列表生成式、生成器
列表生成式 ——可以快速生成list,可以通过一个list推导出另一个list,而代码却十分简洁: >>> [x * x for x in range(1, 11)] [1, 4, ...
- [APIO2007]动物园
题目描述 新建的圆形动物园是亚太地区的骄傲.圆形动物园坐落于太平洋的一个小岛上,包含一大圈围栏,每个围栏里有一种动物. 你是动物园的公共主管.你要做的是,让每个来动物园的人都尽可能高兴.今天有一群小朋 ...
- NLog简单配置与使用
对项目添加NLog 安装完成后,在项目里面会自动引入该引入的dll,并且会添加如下两个文件 NLog的配置主要是在这个config文件里.当然也可以将这个文件里面的nlog节点复制到项目配置文件App ...
- python程序展现图片
突然想写一个python程序能够显示图片的 ,展示文字的已经实现了 现在就搞一搞这个吧 相信也是很简单 首先是放一张图片在e盘下面 等会程序打包的时候将会用到 就决定是你啦 皮卡丘: 然后就写代码吧: