觀察者模式
閱讀設定
喺軟件工程上,觀察者模式係一種軟件設計模式,指一件物件(subject)會有個列表,記住佢嘅觀察者(參見英文:observer)並且喺有需要嗰陣通知啲觀察者,話俾觀察者知發生咗乜嘢變化,當中通知過程好多時係透過呼叫觀察者中嘅方法。觀察者模式呢種做法,喺遊戲編程等嘅多種應用上都有價值[1][2]。
遊戲編程
[編輯]睇埋:遊戲編程
用 Unity 等嘅遊戲引擎製作視像遊戲嗰陣,都可以用觀察者模式。喺視像遊戲入面,好多時候都要用一件事件嚟影響成堆其他物件,例如當有個虛擬敵人死亡嗰時,全場其他物件要播放音效或者震動。然後想像有件隱形嘅物件做事件管理器[註 1],當中有類似以下噉嘅碼:
類 事件管理器(被觀察者): 變數 觀察者清單 = [] 方法 登記觀察者(觀察者): 加入觀察者清單 方法 發出事件(事件內容): 對每個觀察者 喺 觀察者清單: 觀察者.收到事件(事件內容) 類 音效播放器(觀察者): 方法 收到事件(事件內容): 如果 事件內容 ==「敵人死亡」: 播放「敵人死亡」音效 類 爆炸特效(觀察者): 方法 收到事件(事件內容): 如果 事件內容 ==「敵人死亡」: 顯示爆炸動畫 // 使用方式 事件管理 = 新 事件管理器() 事件管理.登記觀察者(新 音效播放器()) 事件管理.登記觀察者(新 爆炸特效()) // 敵人死亡時,通知晒所有觀察者 事件管理.發出事件("敵人死亡")
軟件工程師之所以會用噉嘅設計模式,有好多原因:呢種做法表示,發送事件信息嗰方(subject
)唔使知道觀察者係邊個,提升模塊化嘅程度;而且用呢種做法一次過管理大量要俾反應嘅物件,唔使逐件物件 loop 一次。
睇埋
[編輯]註釋
[編輯]- ↑ 英文中好多時會叫
EventManager
或者類似嘅名。
引咗
[編輯]- ↑ Erich Gamma; Richard Helm; Ralph Johnson; John Vlissides (1994). Design Patterns: Elements of Reusable Object-Oriented Software. Addison Wesley. pp. 293ff. ISBN 0-201-63361-2.
- ↑ "Observer Design Pattern". www.geeksforgeeks.org.