观察者模式在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语言中的基本数据类型,也就是说,它们都不是对象.例如,不能向它们发送消息.然而,有时需要作为对 ...
随机推荐
- UTF-8 的中文檔案名上傳問題
在上传文件后,一般都会用 move_uploaded_file() 进行文件移动改名.但是 move_uploaded_file() 并不支持 UTF-8 编码,如果含有,那么函数就会执行失败,但是这 ...
- 【跟我一步一步学Struts2】——登陆样例
本篇博客通过一个简单的登陆小样例来入门,简单了解一下struts2是怎样工作的: 第一步引入Jar包: commons-fileupload-1.2.1.jar,文件上传 commons-loggin ...
- qq 空间视频地址 的 有效期 403
大约 在24-48小时内 200 http://vwecam.gtimg.com/1006_aa21a85ef3d245f19535cf2ab941ccbb.f0.mp4?ptype=http& ...
- MFC ListControl技巧汇总
转自:http://hi.baidu.com/qi_xian/blog/item/1971aa22da89ada24723e856.html 以下未经说明,listctrl默认view 风格为repo ...
- java笔记线程两种方式模拟电影院卖票
public class SellTicketDemo { public static void main(String[] args) { // 创建三个线程对象 SellTicket st1 = ...
- loadrunner中get和post请求
loadrunner中可以使用web_url和web_link发送get请求,使web_submit_form和web_sumbit_data发送post请求. 有什么不同呢?推荐使用哪一个? web ...
- IDEA 激活方式
最新的IDEA激活方式 使用网上传统的那种输入网址的方式激活不了,使用http://idea.lanyus.com/这个网站提供的工具进行 1.进入hosts文件中:C:\Windows\System ...
- magento 翻译使用实例
在自定义的模块中若想要使用翻译,需在config.xml中加入如下配置 <config> <adminhtml> //后台 <translate> <modu ...
- 全面学习ORACLE Scheduler特性(6)设置Repeat Interval参数
3.3 设置Repeat Interval Job 和Schedule中REPEAT_INTERVAL参数都是用来控制执行的频率或周期,虽然说周期是一个时间性概念,不过REPEAT_INTERVAL指 ...
- cloudera-agent启动File not found : /usr/sbin/cmf-agent解决办法(图文详解)
不多说,直接上干货! 问题详情 bigdata@nssa-sensor1:~$ sudo service cloudera-scm-agent startFile not found : /usr/s ...