2009-11-18 122 views
3

我遇到以下情況。它有一種代碼味道,我並不滿意,但是它的解析似乎很複雜,但方式不同。觀察者模式過載

我有一個表示業務對象的場景圖。我設計了它,以便業務對象本身儘可能簡單。他們實際上是POJO。

現在,1個實體可以通過不同的節點顯示在場景圖的多個區域中。

當實體改變時,所有相關的場景圖節點都應該改變。

我對所有實體都使用觀察模式猶豫不決,因爲我一次在屏幕上有超過50000個實體。

由於所有更改都是從視圖啓動的,現在我正在遞歸場景圖並強制重新加載與更改的實體關聯的所有節點。雖然感覺不對。

有關如何做得更好的建議?

回答

3

業務對象==實體?你在屏幕上有50k個節點,有些實體有多個節點。用戶操作會對實體的狀態進行chage並因此必須更新一些節點。但是當然實體並不知道​​節點。

我會有代理對象包裝實體。他了解與節點的關係。對實體的更新通過他進行,因此他可以完成更新並通知相關節點。有效地避免了迭代查找更新的節點集合。

2

實體應將其更新發布到單個隊列中,然後由負責更新視圖的對象輪詢。

+0

直接通知觀察者與觀察者輪詢隊列有什麼區別? – Thimmayya 2009-11-18 19:09:04

+0

該OP想要讓每個觀察者註冊其對50,000個對象中的每一個的興趣。我不確定你的評論是指什麼。 – 2009-11-18 19:17:51

+0

我無法弄清楚觀察者(實體)將其更新發布到隊列中的好處,並將其直接發佈給觀察者。在我看來,隊列正在取代最終的觀察者,成爲一箇中間人,但現在隊列作爲一個邏輯觀察者反正。 – Thimmayya 2009-11-18 19:30:47