跳去內容

觀察者模式

出自維基百科,自由嘅百科全書

軟件工程上,觀察者模式係一種軟件設計模式,指一件物件(subject)會有個列表,記住佢嘅觀察者(參見英文observer)並且喺有需要嗰陣通知啲觀察者,話俾觀察者知發生咗乜嘢變化,當中通知過程好多時係透過呼叫觀察者中嘅方法。觀察者模式呢種做法,喺遊戲編程等嘅多種應用上都有價值[1][2]

遊戲編程

[編輯]
睇埋:遊戲編程

Unity 等嘅遊戲引擎製作視像遊戲嗰陣,都可以用觀察者模式。喺視像遊戲入面,好多時候都要用一件事件嚟影響成堆其他物件,例如當有個虛擬敵人死亡嗰時,全場其他物件要播放音效或者震動。然後想像有件隱形嘅物件做事件管理器[註 1],當中有類似以下噉嘅碼:

 類 事件管理器(被觀察者):
   變數 觀察者清單 = []
 
   方法 登記觀察者(觀察者):
       加入觀察者清單
 
   方法 發出事件(事件內容):
       對每個觀察者 喺 觀察者清單:
           觀察者.收到事件(事件內容)
 
 類 音效播放器(觀察者):
   方法 收到事件(事件內容):
       如果 事件內容 ==「敵人死亡」:
           播放「敵人死亡」音效
 
 類 爆炸特效(觀察者):
   方法 收到事件(事件內容):
       如果 事件內容 ==「敵人死亡」:
           顯示爆炸動畫
 
 // 使用方式
 事件管理 = 新 事件管理器()
 事件管理.登記觀察者(新 音效播放器())
 事件管理.登記觀察者(新 爆炸特效())
 
 // 敵人死亡時,通知晒所有觀察者
 事件管理.發出事件("敵人死亡")

軟件工程師之所以會用噉嘅設計模式,有好多原因:呢種做法表示,發送事件信息嗰方(subject)唔使知道觀察者係邊個,提升模塊化嘅程度;而且用呢種做法一次過管理大量要俾反應嘅物件,唔使逐件物件 loop 一次。

睇埋

[編輯]

註釋

[編輯]
  1. 英文中好多時會叫 EventManager 或者類似嘅名。

引咗

[編輯]
  1. 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.
  2. "Observer Design Pattern". www.geeksforgeeks.org.