文章轉至: 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