观察者模式在Foundation框架通知中的应用

GitHub传送门

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.使用观察者模式在该项目中的好处:

  • 松耦合,被观察者并不认识任何一个具体观察者,它只知道它们都有一个共同的接口,增强程序的可扩展性。
  • 支持广播通讯,保证观察者对象行动的一致性。

猜你喜欢

转载自www.cnblogs.com/ustc-anmin/p/9823095.html