玩转iOS开发:《iOS设计模式 — 观察者模式》

1,401 阅读3分钟

文章转至: https://cainluo.github.io/14719369255829.html


作者感言

这几天在捣鼓新项目, 在用通知中心的时候突然想到自己用了那么久的通知中心, 为啥不自己动手实现一个呢? 说干就干, 于是乎就研究通知中心的原理, 当然包括**KVO, 这些都是基于观察者模式**实现的, 既然知道了原理, 我们就Do It!!!

最后: 如果你有更好的建议或者对这篇文章有不满的地方, 请联系我, 我会参考你们的意见再进行修改, 联系我时, 请备注工厂模式, 如果觉得好的话, 希望大家也可以打赏一下~嘻嘻~祝大家学习愉快~谢谢~


简介

ObserverUML

说起观察模式, 其实可以举酱紫的一个例子, 就拿实验对象来说明, 研究者是**观察者, 小白鼠是被观察者, 当研究者往小白鼠身上做某些实验的时候, 小白鼠会产生某些反应, 而研究者就会记录以及反馈观察对应的现象, 这种情况就叫做观察者模式**.

说那么多废话, 直接上代码演示吧~~


新建工程

依旧打开我们之前的那个**workSpace工程, 然后新建一个ObserverPattern**工程.

这里我们就拿微信公众号来举个例子, 首先我们要有一个微信公众号中心, 方便我们用来寻找我们想要的公众号.

1

2


针对接口编程

这里普及一个思想, 就是**针对接口编程, 说起针对接口编程, 估计会有一些道友会有迷惑, 啥是针对接口编程? 其实在我们日常开发当中, 我们就已经做到了针对接口编程, 只是我们本身没有意识到, 其实所谓的针对接口编程, 就是我们在写模块或者是在写SDK的时候, 我们会先设计对外公开的API, 然后再内部实现对应的逻辑, 这就是针对接口编程**.

这里有一篇我觉得不错的文章针对接口编程, 如果觉得不好, 可以去吐槽博主, 这我是不会反对的~

现在我们先去声明一些我们需要用到的API先.

3


限制用户

虽然我们声明了一些接口, 但其实是还不够的, 因为公众号并不知道你是否有没有订阅, 如果没有订阅的话, 公众号发出来的消息, 你不可能会收到, 所以在这里我们需要声明一个**Protocol**, 用来限制 用户, 因为订阅号所发送的消息不是全部用户都能接收的, 只要订阅了该订阅号的用户才能收到订阅号所发出来的消息.

4

记得要把对象换一下, 换成了遵守了改协议的对象才能去接收消息

5


实现内部方法

现在我们对应的接口和限制用户的协议都已经写好了, 接下来我们就要去实现**PublicNumberCenter**里的方法, 这样子我们就可以完完整整的实现一个观察者模式了.

由于通知中心是属于单例, 首先我们肯定是要来实现一下单例模式

6

实现完通知中心之后, 我们就要来实现内部的方法, 这样子我们要的通知中心就完成了

7


调用自定义通知中心

写了那么久, 现在我们来尝试调用一下通知中心, 这里我们就简单实现一下, 就让**ViewController成为用户, 遵守PublicNumberProtocol**就好了.

8


工程地址

项目地址: https://github.com/CainRun/DesignPattern