观察者模式初次总结(一)

来源:互联网 发布:服务器坏了数据怎么办 编辑:程序博客网 时间: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进行更改





原创粉丝点击