观察者模式在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语言中的基本数据类型,也就是说,它们都不是对象.例如,不能向它们发送消息.然而,有时需要作为对 ...
随机推荐
- 打开与关闭Linux防火墙
1) 重启后生效 开启: chkconfig iptables on 关闭: chkconfig iptables off 2) 即时生效,重启后失效 开启: service iptables sta ...
- IDEA启动Tomcat报错
Maven编译成功, 可是启动Tomcat报错: Application Server was not connected before run configuration stop, reason: ...
- iOS DeepLinkKit使用简单介绍
Update: 2017.04.08 添加了使用iOS DeepLinkKit使用Universal Links的部分 ---------------------------------------- ...
- java jxl读取excel中Date类型
Workbook book = Workbook.getWorkbook(excel); Sheet sheet = book.getSheet(0); int clos = sheet.getCol ...
- JavaScript基础 -- 定时器
js 定时器有以下两个方法: setInterval() :按照指定的周期(以毫秒计)来调用函数或计算表达式.方法会不停地调用函数,直到 clearInterval() 被调用或窗口被关闭. set ...
- text recognizer (OCR) Engine 光学字符识别
https://github.com/tesseract-ocr/tesseract/wiki https://github.com/UB-Mannheim/tesseract/wiki C:\Use ...
- 【转】React 常用面试题目与分析
作者:王下邀月熊链接:https://zhuanlan.zhihu.com/p/24856035来源:知乎著作权归作者所有.商业转载请联系作者获得授权,非商业转载请注明出处. 本文有一定概率为水文,怕 ...
- bzoj4870
http://www.lydsy.com/JudgeOnline/problem.php?id=4870 矩阵快速幂... 人话题意:从nk个物品里选模k余r个物品,问方案数模P 那么我们有方程 f[ ...
- emma中文显示乱码问题解决
在Linux中如果使用mysql的图形客户端,个人感觉Emma还不错.但是emma默认用apt-get 安装的话,emma是不支持中文的,这个需要自己修改一下了配置文件,或者直接修改emma程序源文件 ...
- GitHub上README.md教程(copy)
[说明:转载于http://blog.csdn.net/kaitiren/article/details/38513715] 最近对它的README.md文件颇为感兴趣.便写下这贴,帮助更多的还不会编 ...