2012-05-26 188 views
-1

在揮杆應用程序中,文本框1取決於組合框1的選定項目。它也取決於文本框2的文本。與此類似,文本框1可能取決於各種組件。對於所有這些更改,將調用文本框1的update()方法(遵循Observable Pattern規則)。如何區分哪個組件發生了變化?觀察者模式:如何區分觀察者

+0

我不確定你在這裏描述的是什麼。你是否將你的應用程序域數據保存在UI層中? –

+0

No. no。我正在關注MVC。但我只是簡單地解釋它。基本上,我訂購了10個新聞頻道/訂閱源。每當有任何這些供稿中出現新的新聞時,我都希望收到通知。這是觀察者模式的權利?但是現在我希望能夠確定哪些新聞提要實際上已經改變。也許如果是來自新聞頻道1,我可能想用黑色顯示它,如果它來自新聞頻道2,我想用藍色顯示它......我希望我能說清楚。 – aps

+0

我認爲重新編寫你的問題是一個好主意,可以讓它更貼近你想要做的事情。 –

回答

0

取決於你如何實現你的觀察者,通常你會提供'發件人'或組件觸發事件。

這樣做..雖然您的Textbox1訂閱3個活動..它可以檢查發件人/組件 是誰。

+0

我不是在找那個。這樣,如果有可能有10個發件人,我將不得不使用10個instanceof或10個塊來檢查發件人 – aps

+0

或switch語句。我想知道你是否真的需要知道發件人。說例如textbox1的值取決於其他10個元素..你可以創建一個updateTextBox()來調查10個元素/計算值; Textbox1只會關注更新/更改的事件。 –

1

我不確定我是否理解你。但我認爲觀察者模式是錯誤的選擇,觀察者模式解決了繁忙的等待問題,並通知許多客體主體(可觀察者)已經改變,而不是相反。你可以彎曲模式規則,並讓觀察者發送一條消息給主題他們已經改變了,但那不再是觀察者模式。

注意:在處理設計模式時,總要看看他們解決了什麼問題,因爲實現方式在很多情況下非常接近,以至於無法將它們與代碼區分開來。

+0

我會解釋它。我訂閱了10個新聞頻道/ Feed。每當有任何這些供稿中出現新的新聞時,我都希望收到通知。這是觀察者模式的權利?但是現在我希望能夠確定哪些新聞提要實際上已經改變。也許如果是來自新聞頻道1,我可能想用黑色顯示它,如果它來自新聞頻道2,我想用藍色顯示它......我希望我能說清楚。 – aps

+0

很清楚,而不是觀察者模式。觀察者模式給予了相反的結果,許多人在一個特殊對象發生變化時得到通知。你剛剛描述了相反的情況。因此,只需創建一個'manager'函數即可獲得一個整數\ Enum標識誰已更改,並調用相應的函數。可能有一個設計模式 - 但我不知道它。 –

+1

供參考:根據你的頭銜,你的名字是錯的。就像這樣:主題 - 每個人都在傾聽;觀察員 - 正在傾聽主題的人。 –