設計模式筆記 – 觀察者模式Reading Notes, Design Patterns, Developing / By LoneliNerd / 2023 年 4 月 4 日 2023 年 4 月 5 日 分類行為型模式的目的(定義)n個觀察者對象把自身「注冊」到某個對象的通知列表中,當該對象狀態改變時,該對象遍歷這個列表,通知所有的觀察者對象觀察者對象收到通知後,便執行相應的行動,如:直接從觀察對象身上獲取數據根據從通知方法中傳來的參數做一些事情其他行為使用場景例子UI數據刷新是觀察者模式常用的場合之一,現在比如有一個動作遊戲,UI的Overlay面板上有各個控件用於顯示英雄的生命/攻撃力/…與遊戲場景中的英雄對象息息相關的信息:UI控件在初始化時,將自己注冊到英雄對象的觀察者列表中英雄自身數據變化時,如被怪物A了一下,生命減少了10點,英雄就同時遍歷整個觀察者列表,通知所有觀察者自己的屬性已發生變化這裡既可以直接把變化值作為通知的參數傳給觀察者也可以只負責「通知」,具體取值由觀察者通過英雄對象提供的屬性getter獲取這裡一個優化點是增加「行為類型」觀察者注冊時,記錄觀察者關注的「行為類型」Dictionary<EventType, List<IObserver> observers> eventObserversDict;然後屬性變化時,就可以只通知關注了某個「行為類型」的觀察者們foreach observers in eventObserversDict[EventType.HealthUpdate]類圖 參考書目《Head First Design Patterns》Eric Freeman, Elisabeth Robson, Kathy Sierra, Bert Bates