在揮杆應用程序中,文本框1取決於組合框1的選定項目。它也取決於文本框2的文本。與此類似,文本框1可能取決於各種組件。對於所有這些更改,將調用文本框1的update()方法(遵循Observable Pattern規則)。如何區分哪個組件發生了變化?觀察者模式:如何區分觀察者
回答
取決於你如何實現你的觀察者,通常你會提供'發件人'或組件觸發事件。
這樣做..雖然您的Textbox1訂閱3個活動..它可以檢查發件人/組件 是誰。
我不是在找那個。這樣,如果有可能有10個發件人,我將不得不使用10個instanceof或10個塊來檢查發件人 – aps
或switch語句。我想知道你是否真的需要知道發件人。說例如textbox1的值取決於其他10個元素..你可以創建一個updateTextBox()來調查10個元素/計算值; Textbox1只會關注更新/更改的事件。 –
我不確定我是否理解你。但我認爲觀察者模式是錯誤的選擇,觀察者模式解決了繁忙的等待問題,並通知許多客體主體(可觀察者)已經改變,而不是相反。你可以彎曲模式規則,並讓觀察者發送一條消息給主題他們已經改變了,但那不再是觀察者模式。
注意:在處理設計模式時,總要看看他們解決了什麼問題,因爲實現方式在很多情況下非常接近,以至於無法將它們與代碼區分開來。
我會解釋它。我訂閱了10個新聞頻道/ Feed。每當有任何這些供稿中出現新的新聞時,我都希望收到通知。這是觀察者模式的權利?但是現在我希望能夠確定哪些新聞提要實際上已經改變。也許如果是來自新聞頻道1,我可能想用黑色顯示它,如果它來自新聞頻道2,我想用藍色顯示它......我希望我能說清楚。 – aps
很清楚,而不是觀察者模式。觀察者模式給予了相反的結果,許多人在一個特殊對象發生變化時得到通知。你剛剛描述了相反的情況。因此,只需創建一個'manager'函數即可獲得一個整數\ Enum標識誰已更改,並調用相應的函數。可能有一個設計模式 - 但我不知道它。 –
供參考:根據你的頭銜,你的名字是錯的。就像這樣:主題 - 每個人都在傾聽;觀察員 - 正在傾聽主題的人。 –
- 1. 觀察者模式 - 觀察者創建
- 2. 觀察者模式
- 3. 觀察者模式-受試者保持到由觀察者
- 4. 具有兩個觀察者列表的觀察者模式
- 5. 觀察者設計模式 - 具體主題和觀察者
- 6. 觀察者模式Java - 使用線程的多個觀察者
- 7. 觀察者模式 - 將信息傳遞給觀察者
- 8. 異步觀察者模式
- 9. 實現觀察者模式
- 10. 瞭解觀察者模式
- 11. 觀察者模式imp
- 12. asp.net觀察者模式
- 13. jQuery和觀察者模式
- 14. 觀察者模式混淆
- 15. MVC和觀察者模式
- 16. 與觀察者模式
- 17. 觀察者模式建議
- 18. 觀察者模式類(JAVA)
- 19. Vue.js和觀察者模式
- 20. SI +觀察者模式
- 21. 觀察者模式vs MVC
- 22. python觀察者模式
- 23. 觀察者和主題觀察者模式之間有什麼區別
- 24. 如何應用觀察者模式如果觀察者也是主體
- 25. Android「觀察者」
- 26. Angular2觀察者
- 27. CFNotificationCenterRemoveObserver觀察者
- 28. 觀察者python中的可觀察類
- 29. Java觀察者和可觀察的
- 30. 觀察者模式或其他模式
我不確定你在這裏描述的是什麼。你是否將你的應用程序域數據保存在UI層中? –
No. no。我正在關注MVC。但我只是簡單地解釋它。基本上,我訂購了10個新聞頻道/訂閱源。每當有任何這些供稿中出現新的新聞時,我都希望收到通知。這是觀察者模式的權利?但是現在我希望能夠確定哪些新聞提要實際上已經改變。也許如果是來自新聞頻道1,我可能想用黑色顯示它,如果它來自新聞頻道2,我想用藍色顯示它......我希望我能說清楚。 – aps
我認爲重新編寫你的問題是一個好主意,可以讓它更貼近你想要做的事情。 –