> For the complete documentation index, see [llms.txt](https://wilden-chen.gitbook.io/swift-design-patterns/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://wilden-chen.gitbook.io/swift-design-patterns/observer.md).

# 觀察者模式 - Observer

在觀察者模式裡，一個物件在狀態變化的時候會通知另一個物件。參與者並不需要知道其他物件的具體是幹什麼的 - 這是一種降低耦合度的設計。這個設計模式常用於在某個屬性改變的時候通知關注該屬性的物件。

常見的使用方法是觀察者註冊監聽，然後再狀態改變的時候，所有觀察者們都會收到通知。

在 MVC 裡，觀察者模式意味著需要允許 `Model` 對象和 `View` 對象進行交流，而不能有直接的關聯。

基於 `Cocoa` 或是 `Cocoa Touch` 下的觀察者模式有下列兩個：

* 通知： `Notification`
* 鍵值觀察： `Key-Value Observing (KVO)`

而其他程式語言，如 Java 或是 C# 還有一種觀察者模式，稱之為事件（Event Flow），而在 iOS 開發裡面，我們使用下面這個 Framework 來實踐。

* 事件流：`LionEvents`
