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