美文网首页
观察者模式

观察者模式

作者: helinyu | 来源:发表于2021-09-07 11:55 被阅读0次

    定义: 定义对象之间的一种一对多的依赖关系, 当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新。

    常见的例子:


    上班合理摸鱼的例子

    常见的问题:将一个系统分割成一系列相互协作的类有一个很好的副作用, 那就是需要维护相关对象之间的一致性。 我们不希望为了维持一致性而使各类紧密耦合,这样会给维护、扩展和重用都带来不便。 —— 可以使用观察者解决

    使用情况:
    0》有两种抽象类型相互依赖。 将它们封装在各自的对象中,就可以对它们单独进行改变和复用。 【依赖】
    1》 当一个对象的改变需要同时改变其他对象的时候,而且它不知道具体有多少对象有待改变时。【因改变而改变你】
    2》一个对象必须通知其他对象, 而它有不需要知道其他对象是什么 【改变其他对象不需要了解其他对象】

    观察者模式所做的工作其实就是在解除耦合。 让耦合的双方都依赖于抽象,而不是依赖于具体。 从而使得各自的拜年话都有影响另一边的变化。

    如果我们通过接口来实现这个观察者与主题者的时候,但是,很多时候观察者并不一定实现了这个接口呀!所以这个是有问题的。 【局限性】

    可以使用了委托来解决通知的发送问题。
    委托: 是一种引用方法的类型。 一旦为委托分配了方法,委托将与该方法具有相同的行为。 委托方法的使用可以像其他热呢和方法一样,具有参数和返回值。 委托可以看做是对函数的抽象,是函数的“类”,委托的实例将代表一个具体的函数。

    一个委托可以搭载多个方法,所有方法被依次换气。 更重要的是,它可以使得委托对象所搭载的方法并不需要属于同一个类。

    委托对象锁搭载的所有方法必须具有相同的原形和形式,也就是拥有相同的参数类表和返回值类型。

    Cocoa Touch 框架使用的观察者
    1)键值对观察 【观察者】
    2)通知 【订阅】

    通知代替KVO

    1. 需要为主题和观察者定义一个共同的标识符
    2. 当scribble的内部状态发生改变时,它会把带有指定 标识符的通知,使用任何必要的额对象作为参数投递到NSNotificationCenter
    3. 接下来,所有订阅了标有这个标识符提供给NSNotification的选择器中处理这一通知
    4. 然后观察者ui在作为回调函数提供给NSNotification的选择器中处理这一通知。

    观察者和发布订阅的区别

    相关文章

      网友评论

          本文标题:观察者模式

          本文链接:https://www.haomeiwen.com/subject/hrkuwltx.html