观察者模式初次总结(一)
来源:互联网 发布:服务器坏了数据怎么办 编辑:程序博客网 时间:2024/05/18 03:09
今天看iOS设计模式中的观察者模式自己看,看了半天都看不懂,后来往这里一搜瞬间明白了许多,不过明白贵明白真要自己运用估计还是够呛;
一、概念
观察者模式:定义对象间一对多的依赖关系,当一个对象的状态发生改变时,所有依赖它的对象都得到通知并被自动更新
一句话:订阅杂志的人自己去杂志社订阅杂志,杂志社到货了就会告诉订阅杂志的人。
二、运用情况
MFC模式中使用观察者模式;
KVC-KVO;
通知;
三、理解通知和kvc-kvo的使用;
1.通知:两个过程:1投递通知;2接收通知
主要涉及的方法:
[NSNotificationCenter postNotification:[NSNotification notificationWithName:@"data changes"]]
把data changes这个通知投递到注册中心,及设置要通知的内容;
[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(update:) name:@"data change" object: subject;
在某个对象调用这个方法意思是:
该对象收到datachange通知后,调用update方法;
2.KVC-KVO:1.确定什么东西要改变,即被观察者对象;2.作为观察者改变了之后调用的方法,确认那个键是否改变;
KVO观察者主要针对于属性的值的变化而收到消息;当对属性值更改时,告诉观察者,默认情况是调用其存取方法setter方法;
第一种情况:
1.我们设置属性值a,value为:“isa”;[self setvalue:"isa" forkey:"a"];
2.如果我们更改了a的属性值则,调用:
-(void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context
if keypath==a,然后再实现自己的方法等等;
第二种情况:
不是仅仅针对于属性值value的改变,而是通过加入几行代码把要更改的语句包起来;
[self willchangevaluekey:@"a"]和[self didchangevaluekey:@"a"];
[scribble_ addObserver:self forkeypath:@"mark" options:NSkeyvalueObsevingOptionInital | NSKeyValueObservingOptionNew context:nil];
scribble通知self时,keyvalue值初始化;keyvalue值更新时,通知它
self为一个视图控制器,当scribble中mark的属性更改的是时候通知观察者self;
文章中mark其实就是一个模型数据类的实例;对应于MFC中的M,iOS编程之道中id <mark> newstroke,其实就是声明遵守mark协议的类对象;
之后第一种情况一样调用那个方法
3.MvC观察者模式的描述
视图v的触摸事件发生,c处理这个事件,并且更新m,m更新完毕后通知c,这时c就是观察者,c然后通知v进而对v进行更改
- 观察者模式初次总结(一)
- 观察者模式(一)
- 观察者模式(一)
- 观察者模式(一)
- 观察者模式(一)
- java观察者模式(一)
- 设计模式 (一) 初次体验
- 观察者模式(Observer Pattern)(一):观察者模式介绍
- 设计模式(一)观察者设计模式
- 设计模式-观察者模式(一)
- 设计模式之观察者模式(一)
- 设计模式学习(一)观察者模式
- 设计模式之观察者模式(一)
- 学自慕课网:观察者模式(一)
- GOF之观察者模式(一)
- 深入理解观察者模式(一)
- 观察者模式浅谈篇(一)
- 学习一观察者模式(observer)
- 下标到指针之间和转换
- 【科普】之桌面操作系统
- 敏捷感悟1 - 项目有终点,敏捷无终点。敏捷就是“持续改进”
- 杭电2049
- iOS观察者模式
- 观察者模式初次总结(一)
- BCB运行时常见的几个错误
- java小札记
- 有名内部类
- 61条Java面向对象设计的经验原则,成为高级程序员必备
- [Android调试基础四]键盘输入调试(输入监听与模拟发送)
- java 实现双色球随机选一注
- Oracle基础
- [精通WindowsSocket网络开发-基于VC++实现]第一章——准备开发环境