美文网首页
设计模式学习笔记(二)观察者模式

设计模式学习笔记(二)观察者模式

作者: Link913 | 来源:发表于2017-05-20 18:24 被阅读88次

定义

定义了对象之间的一对多依赖,这样一来,当一个对象改变状态时,他的所有依赖者都会收到通知并自动更新.

模式特点

  • 观察者模式定义了对象间一对多的关系.
  • 主题可以通过一个接口来更新观察者.
  • 观察者和可观察者之间通过松耦合的方式结合,可观察者不知道观察者的实现细节,只知道观察者实现了相应的接口.
  • 有多个观察者时,不可以依赖特定的通知顺序,这个顺序和语言自身的实现有关.
  • 当观察者取消订阅时,他将不再收到主题发出的消息.

个人理解

看完立刻让我联想到了OC中的KVO通知,仔细想了想他们确实都满足上面的特点,一对多,松耦合,改变后能够传递消息.那再仔细想一想,协议block算吗?写起来吧,对他们进行改造其实也能够实现,但是这本身其实没什么意义,因为OC提供给我们的这两种常用的方式其实已经算是很不错的一种方式了,这里不会对KVO通知如何去使用做过多的阐述.
一直在接触的RAC这种框架其实在我看来也是蛮像的,但他有个优点,我们可以在主题方先行结束订阅,也可以在订阅者方提前结束,并且通过函数式的优点,我们可以在时间空间上对信号进行控制,比如节流忽略相关信息,这其实在我看来都是一定程度上在观察者模式方向上的一定优化和扩展.
书中还扩展了我们的观察者不应仅仅只是被动地接收主题发送的信息,还可以主动的去拉取,写法大概上相当于声明一个BOOL值,当要观察的对象(OC中可以通过set方法触发),当我们主动去拉取的时候,改变这个BOOL值此时才可以让通知或者KVO发憷值,发出完再去更改这个BOOL值,这样只有我们每次去拉取的时候他才会发送一次.

观察者模式在OC中的个人猜测实现

  • 1 主题中应该有一个数组来存储自己所需要通知的对象,观察者通过订阅主题来将自己添加到主题的数组中.
  • 2 当需要通知时,主题遍历这个数组,给每一个对象发送消息.
  • 3取消订阅时,主题观察者从数组中移除,以后就不会再发送了.
  • 4观察者销毁的时候,一定要取消订阅,否则当主题再次发送消息时,会因为观察者已经不在了而导致crash,这里调试起来还相当的困难,希望各位养成习惯吧(ps:一般老手这都是习惯了)

相关文章

  • 设计模式之观察者模式

    设计模式之观察者模式 本篇是设计模式系列博客的第四篇,本篇主要学习设计模式中的第二个行为型模式---观察者模式。 ...

  • 设计模式之——观察者模式

    前言:本文仅作为第一次学习设计模式的参考和笔记。初探观察者模式: 观察者模式:Observer Pattern 又...

  • 31 Java设计模式系列-观察者模式

    观察者模式 观察者模式是非常常见的设计模式之一,写个笔记,记录一下我的学习过程和心得。 首先了解一些观察者模式的定...

  • 设计模式系列—观察者(Observer)模式

    HeadFirst设计模式读书笔记 观察者模式 一,简介 什么是观察者模式?定义:观察者模式定义了对象之间的一对多...

  • Python观察者模式

    [python|高级篇|笔记|设计模式|观察者模式] 这两天读了[Head First设计模式][1]和[Pyth...

  • 设计模式整理(9) 观察者模式

    学习《Android 源码设计模式解析与实践》系列笔记 介绍 观察者模式是使用率非常高的模式,最常用在 GUI 系...

  • 观察者设计模式

    每周学点Java设计模式__观察者设计模式 本次继续更新java23中设计模式之一——观察者模式。 观察者模式(有...

  • Observer 观察者模式

    设计原则学习笔记 设计模式学习笔记 作用 使数据结构的变换可以从数据结构主动通知到观察者处。同时方便观察者和被观...

  • iOS常用设计模式

    1.为什么学习设计模式 对于设计模式,我们并不陌生。一谈起设计模式,脑海里马上就想到单例模式,委托模式,观察者模式...

  • 读书笔记-设计模式-可复用版-Observer 观察者模式

    读书笔记-设计模式-可复用版-Observer 观察者模式 wikipedia: https://en.wikip...

网友评论

      本文标题:设计模式学习笔记(二)观察者模式

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