1. 程式人生 > >觀察者模式在Foundation框架通知中的應用

觀察者模式在Foundation框架通知中的應用

GitHub傳送門

1.何為觀察者模式?

觀察者設計模式定義了物件間的一種一對多的依賴關係,以便一個物件的狀態發生變化時,所有依賴於它的物件都得到通知並自動重新整理。

舉個簡單的例子:你和你的舍友都訂閱了同一個公眾號,你和舍友就是觀察者,而這個公眾號就是觀察物件。作為觀察者,你不需要每時每刻都盯著這個公眾號看,觀察是否有新的訊息;當這個公眾號有新的訊息時,即當它的狀態改變時,它會主動通知你們,你們也會自動收到新的訊息。你想收到這個公眾號的訊息,你必須得訂閱它,即註冊成為它的觀察者;如果你不想再收到這個公眾號的訊息,取關就行,即移除你這個觀察者。

2.觀察者模式在Foundation框架中的實現原理?

(1)建立Subject

    將傳送訊息的稱為Subject,通知的觀察者稱為Observer。下方是通知的Subject的實現,下方的Boss扮演的就是Subject角色。如果Boss要傳送通知的話,需要以下幾步:

  • 建立訊息字典,該字典承載的就是觀察著所獲取的資訊。
  • 建立通知(NSNotification),該通知也是要傳送給Observer的。通知中的資訊量更大,其中包括髮出通知的Subject的名字(每個Subject都有一個名字),還包括髮送通知的物件,以及我們建立的訊息字典。
  • 將該通知傳送給“通知中心”----NotificationCenter,NotificationCenter會根據Notification所承載的資訊來找到觀察此通知的所有Observers,並把該Notification傳給每個觀察者。

 

程式碼的具體實現

 

(2)新增Observer

    在新增Observer時,我們要指定該觀察者所觀察的是哪一個Subject。這也就是為什麼要為Subject命名了,在新增Observer時就是通過Subject的名字來指定其觀察的物件的。除了指定觀察物件外,還需要指定收到通知後所執行的方法。在指定的方法中需要有一個引數,該引數就是用來接收上方Subject所發出的NSNotification的物件的。

 

程式碼的具體實現

3.觀察者模式的應用場景:

  • 對一個物件狀態的更新,需要其他物件同步更新,而且其他物件的數量動態可變;
  • 物件僅需要將自己的更新通知給其他物件而不需要知道其他物件的細節。

4.使用觀察者模式在該專案中的好處:

  • 鬆耦合,被觀察者並不認識任何一個具體觀察者,它只知道它們都有一個共同的介面,增強程式的可擴充套件性。
  • 支援廣播通訊,保證觀察者物件行動的一致性。