文章转至: https://cainluo.github.io/14719369255829.html
作者感言
这几天在捣鼓新项目, 在用通知中心的时候突然想到自己用了那么久的通知中心, 为啥不自己动手实现一个呢? 说干就干, 于是乎就研究通知中心的原理, 当然包括**
KVO, 这些都是基于观察者模式**实现的, 既然知道了原理, 我们就Do It!!!最后: 如果你有更好的建议或者对这篇文章有不满的地方, 请联系我, 我会参考你们的意见再进行修改, 联系我时, 请备注
工厂模式, 如果觉得好的话, 希望大家也可以打赏一下~嘻嘻~祝大家学习愉快~谢谢~
简介
说起观察模式, 其实可以举酱紫的一个例子, 就拿实验对象来说明, 研究者是**
观察者, 小白鼠是被观察者, 当研究者往小白鼠身上做某些实验的时候, 小白鼠会产生某些反应, 而研究者就会记录以及反馈观察对应的现象, 这种情况就叫做观察者模式**.说那么多废话, 直接上代码演示吧~~
新建工程
依旧打开我们之前的那个**
workSpace工程, 然后新建一个ObserverPattern**工程.这里我们就拿微信公众号来举个例子, 首先我们要有一个微信公众号中心, 方便我们用来寻找我们想要的公众号.
针对接口编程
这里普及一个思想, 就是**
针对接口编程, 说起针对接口编程, 估计会有一些道友会有迷惑, 啥是针对接口编程? 其实在我们日常开发当中, 我们就已经做到了针对接口编程, 只是我们本身没有意识到, 其实所谓的针对接口编程, 就是我们在写模块或者是在写SDK的时候, 我们会先设计对外公开的API, 然后再内部实现对应的逻辑, 这就是针对接口编程**.这里有一篇我觉得不错的文章针对接口编程, 如果觉得不好, 可以去吐槽博主, 这我是不会反对的~
现在我们先去声明一些我们需要用到的API先.
限制用户
虽然我们声明了一些接口, 但其实是还不够的, 因为公众号并不知道你是否有没有订阅, 如果没有订阅的话, 公众号发出来的消息, 你不可能会收到, 所以在这里我们需要声明一个**
Protocol**, 用来限制 用户, 因为订阅号所发送的消息不是全部用户都能接收的, 只要订阅了该订阅号的用户才能收到订阅号所发出来的消息.
记得要把对象换一下, 换成了遵守了改协议的对象才能去接收消息
实现内部方法
现在我们对应的接口和限制用户的协议都已经写好了, 接下来我们就要去实现**
PublicNumberCenter**里的方法, 这样子我们就可以完完整整的实现一个观察者模式了.由于通知中心是属于单例, 首先我们肯定是要来实现一下单例模式
实现完通知中心之后, 我们就要来实现内部的方法, 这样子我们要的通知中心就完成了
调用自定义通知中心
写了那么久, 现在我们来尝试调用一下通知中心, 这里我们就简单实现一下, 就让**
ViewController成为用户, 遵守PublicNumberProtocol**就好了.
工程地址
项目地址: https://github.com/CainRun/DesignPattern