
設計模式
177
最後一件事是建立和關閉遊戲:
觀察者模式(Observer)
Observer 模式廣泛的用在客戶端的 JavaScript 程式開發。所有的瀏覽器事件,包括
mouseover、keypress 等等都是這種模式的實例。這種模式也稱為自訂事件(custom
events),指的是你用程式所建立,而非瀏覽器所觸發的事件。此模式還有另一個名稱叫
做訂閱者/出版者(subscriber/publisher)模式。
此模式背後的 主要動機,是 促使降低耦合性 。物件不再是 去呼叫其他物件 的方法,
取而代之的是,物件可以訂閱(subscribes)其他物件的特定活動,並在發生時得到
通知。訂閱者也被稱為 observer(觀察者),被觀察的物件稱為出版者(publisher)
或是主題(subject)。當有重要的事件發生時,出版者會通知(呼叫)所有的訂閱者
(subscribers),且通常會用 event 物件的形式傳遞一份訊息。
範例 #1: 訂閱雜誌
讓我們來看一個具體的例子,以了解這個模式。假設你有一個出版社物件
paper
,其每日
發行報紙,還出版一份月刊雜誌。有個訂閱者
joe
會在每次出版的時候收到通知。
這個
paper
物件需要一個
subscribers
屬性,它是一個陣列,儲存著所有的訂閱者。訂閱
的動作其實就只是將訂閱者加入到這個陣列。當事件發生時,
paper
會逐一尋訪訂閱者清
單並通知他們。所謂通知,就是呼叫訂閱者物件的某個方法,因此訂閱者必須提供一 ...