美文网首页
观察者模式(一)---通知机制

观察者模式(一)---通知机制

作者: 小冰山口 | 来源:发表于2016-10-13 01:32 被阅读0次

本人有若干成套学习视频, 可试看! 可试看! 可试看, 重要的事情说三遍 包含Java, 数据结构与算法, iOS, 安卓, python, flutter等等, 如有需要, 联系微信tsaievan.

观察者模式可以说是程序设计中最重要的模式, 在面向对象编程的过程中, 我们很大程度上都扮演了观察者的角色, 当 A 发生某种改变时, B 将执行某种操作, 这是一种很常见的模式, 甚至代表了我们整个世界的运转. 那么我们如何将 A 的改变,告知 B 呢?

  • 首先, B 要对 A 的改变有兴趣, 也就是成为 A 的观察者;(订阅通知)
  • 其次, A 发生改变了之后, B 将作出什么样的操作; (接收通知后执行的操作)
  • 最后, A 的改变需要通过一定的途径告诉B.(发通知)

打个很简单的比方,

  • B 买了一只股票叫 A; (订阅通知)
  • 当 A 涨或者跌的时候, B 应该要去买或者卖; (接收通知后执行的操作)
  • 那么 A 会通过一些平台(大智慧等)告知 B 涨跌的状况 (发通知)

这就是简单的通知机制

在 iOS 中, Foundation 框架为我们封装了一个通知中心的单例, 通过这个单例,我们可以去完成这种操作甚至传值(userInfo)

对于一个A 来说,可以将这个通知传给所有订阅了这个通知的人, 也就是说股票 A 要像所有买了这只股票的人告知其涨跌状况,如下图所示:

发布通知示意图

对于 B 来说,作为观察者,我当然也可以观察多个对象的变化, 就像 B 可以买多只股票一样

接收通知示意图

假如我现在有个需求, 第二个控制器要回传一个颜色信息给第一个控制器,并赋值给第一个控制器的 view, 怎么做?方法很多,用通知,无非就这么几步:

  • 订阅通知
  • 收到通知后的进行的操作(其实可以用一个以 block 为参数的方法)

第一个控制器的代码

- (void)viewDidLoad {
    [super viewDidLoad];
    // Do any additional setup after loading the view, typically from a nib.
    
    [[NSNotificationCenter defaultCenter] addObserverForName:@"changeColor" object:nil queue:[NSOperationQueue mainQueue] usingBlock:^(NSNotification * _Nonnull note) {
        self.view.backgroundColor = note.userInfo[@"color"];
    }];
}

  • 第二个控制器发布通知
- (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event
{
    [[NSNotificationCenter defaultCenter]postNotificationName:@"changeColor" object:nil userInfo:@{@"color":[UIColor redColor]}];
}

这样, 当完成触屏操作后,第二个控制器会通过通知把颜色信息传给第一个控制器,并给他的 view 赋值

  • 第一个控制器移除通知(养成好的习惯, 有添加, 有移除)
- (void)dealloc
{
    [[NSNotificationCenter defaultCenter]removeObserver:self];
}

完成效果:


完成效果

PS. 本人有若干成套学习视频, 包含Java, 数据结构与算法, iOS, 安卓, python, flutter等等, 如有需要, 联系微信tsaievan.

相关文章

  • iOS中通知实现观察者模式

    KVO与通知都可实现观察者模式。 一、通知简介 NSNotificationCenter是一个消息通知机制,类似广...

  • 常用设计模式整理

    ios面试题(整理) ios常用的设计模式有哪些? MVC模式、委托模式、观察者模式(kvo、kvc、通知机制)、...

  • IOS 设计模式-观察者模式,代理模式,MVC模式,单例模式,策

    一.观察者模式,实现:通知和KVO 触发机制: 一个对象(观察者),观察另一个对象(被观察者)的某...

  • 通知

    通知是使用观察者模式来实现的用于跨层传递消息的机制,传递方式为一对多 通知机制&原理 在NSNotificatio...

  • OC观察者模式之Notification

    通知Notification: 通知是使用观察者模式这一设计模式来实现的用于跨层传递消息的机制 传递方式为1对多 ...

  • 观察者模式(一)---通知机制

    本人有若干成套学习视频, 可试看! 可试看! 可试看, 重要的事情说三遍 包含Java, 数据结构与算法, iOS...

  • 通知与推送

    $\color{red}{通知?}$ 通知: 使用观察者模式来实现的用于跨层传递消息的机制 关键类结构: NSNo...

  • 谈KVC、KVO(重点观察者模式)机制编程

    谈KVC、KVO(重点观察者模式)机制编程 谈KVC、KVO(重点观察者模式)机制编程

  • 通知 NSnotification

    通知是使用观察者模式实现的用于跨层传递消息的机制 特点 观察者模式实现的 作用 进行跨层传递消息 在我们业务开发过...

  • Spring 事件机制概述

    Spring 事件机制是观察者模式的典型应用,本文将由浅入深从观察者模式、java事件机制、Spring事件机制三...

网友评论

      本文标题:观察者模式(一)---通知机制

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