2013-05-10 199 views
1

我正在學習設計模式,我偶然發現了一個問題,我真的不知道如何找到答案。在觀察者設計模式類圖中,我看到一個具體觀察者通常會提到主題。但是,誰設置了該參考的價值?以及如何調用附加函數?觀察者是否根據他們所擁有的主題參考來調用它,或者其他人設置主題,然後將觀察者附加到主題上?我查找了一些例子,但我仍然遇到了麻煩,找到實現這一點的最佳方式。觀察者模式 - 觀察者創建

回答

2

觀察者是希望被通知有關主題的變化或事件的組件。它決定觀察這個主題,並將自己添加到主題維護的觀察者列表中。

典型的用例是一個包含按鈕的圖形面板。圖形面板創建一個按鈕並將其添加到自身。並且每次點擊該按鈕時都想顯示一個對話框。因此,它將自己添加爲按鈕的觀察者,並且該按鈕會在點擊時通知面板。

在這個例子中,觀察者創建它觀察的對象。但在某些情況下情況並非如此,並且當對主題的引用作爲參數傳遞給其構造函數或其方法之一時。這與觀察者模式本身的原則無關。

+0

謝謝。我認爲這與我正在尋找的答案非常接近。 – darxsys 2013-05-10 15:51:29

1

主體是控制某些事件或具有觀察員感興趣的某些屬性的對象。觀察者向主體註冊表示該興趣,主體保留已註冊觀察者的列表。

當主體的屬性發生變化或發生感興趣的事件時,主體遍歷其註冊的觀察者列表並通知他們有關該更改或事件。

有關通知觀察員的具體細節可能會有所不同。這可能是他們有一個衆所周知的方法被調用。這可能是因爲他們指定了他們想要調用的自定義方法,他們將這些方法指定爲註冊過程的一部分。