---
# System prepended metadata

title: Design Pattern (Observer)
tags: [iOS]

---

# Design Pattern (Observer)

### question1:
你的Pattern要解決什麼問題？ 如何辨識使用時機？
        
    解決在1對多的對象傳值問題。
    多個對象需要同時參考同個"對象"去做後續的更新，或是狀態的改變。


### question2:
畫出Class Diagram

![image](https://hackmd.io/_uploads/HkJoe_2r6.png)


### question3:
你的Pattern如何解決問題？ 解決問題的機制？

    透過class diagram可以知道，"Subject"是被觀測者，
    "Observer"則是觀測者，透過subject的註冊方法
    observer可以針對想知道的內容去做註冊，
    等無須接受通知時也可以隨時透過subject的unregister
    方法解除觀測者身份。


### question4:
請展示你寫的Sample Code，或是馬上寫一個


### question5:
你的Pattern可以跟其他Pattern混合使用嗎？ 
如果可以，請舉例

    工廠模式。
    如果系統中存在多種觀察者，
    可以使用 Factory pattern 
    模式來創建這些觀察者的實例。
    這樣的組合可以使系統更靈活，易於擴展。


### question6:
你的Pattern有衍生問題嗎？ 
如果有，那是什麼問題？可以如何解決？

    1.如果subject狀態變化頻繁，可能會導致觀察者被過度更新，
    即使觀察者對某些更新不感興趣，這也可能導致效能下降。

    2.通知順序問題