栗子現場直播 千篇一栗
有很多簡單的道理,若不是被遺忘,不是察覺不到,就是知易行難。

2009年8月23日 星期日

狀態/事件

  一般來說,一個程式只要有介面,不論是文字介面還是圖形介面,都會有它的「狀態」。就以紅白機的 Super Mario 為例,整個遊戲的狀態大慨如下:

  除了狀態以外,還有「事件」。「事件」包括鍵盤/滑鼠動作。就以 Super Mario 為例,使用者的按鍵就是「事件」的一種。
  而程式就要對應不同的狀態,不同的事件,做不同的動作。在 C / C++ / Java 裡,一般都會用到 if / switch 去做。

  很奇怪,也很有趣的是,我遇過的大部份程式,都會這樣使用 if / switch 。

  但問題是,當我們要修改程式,往往是同時對一個 State 的多個 Event 去做修改。於是,當我們要修改 State 2 的所有 Event 時,就要在程式碼中改動以下的區域。

  可以試想想,當有超過 10 種 State , 10 種 Event 時,要針對一個 State 做修改會造成甚麼慘況。

  為了讓程式易於維護,我寫 code 時一般會用這樣的方法:

  當然,在必要時,可以出現一些變化。例如當遇到一些比較 Global 的 Event ,就會這樣:

沒有留言: