2010-05-05 40 views
3

觀察者模式?我在哪裏可以得到這樣的例子在Java中(我知道谷歌,但所期待的一些個人見解也。)Java Inter Application Form通信觀察者模式

在我的問題的妥善解釋:

我有3種形式/窗口。 「board」是作爲應用程序加載的主要形式。

「聊天」是文本聊天發生的地方。

「網絡」是建立網絡連接的地方。

我有遊戲(connect4)在本地工作,我想實現它的網絡版本。

我的想法可能是觀察者模式有一個線程(或某事)在運行時監視網絡狀態,並更新聊天和電路板形式的當前網絡狀態以及從網絡接收數據。

我的想法是否有效?或者我應該如何着手在整個應用程序中建立網絡和網絡狀態更新?

感謝您的意見。

board http://img39.imageshack.us/img39/5221/boardz.jpg

chat http://img691.imageshack.us/img691/3629/chatos.jpg

network http://img441.imageshack.us/img441/5906/networks.jpg

編輯:有一本關於Java的Observer模式任何一個可以推薦?

回答

0

在這種情況下,聊天和遊戲窗口將被視爲觀察者。您需要實現一個名爲Observers的接口(java API在java.util.Observer上有一個本地Observer模式,但您可以實現自己的接口),並讓您的聊天和電路板窗口實現它們。你可能有它的樣子:

public interface Observer 
{ 
public void postUpdate(String newData); 
} 

postUpdate是,所有觀察員將需要定義一個函數,這兩個類和其他任何你想以後包括將需要實現觀測,如:

public class ChatWindow Implements Observer 
{ 
//bla bla bla 
} 

然後,在你的網絡類,你要像

public void addObserver(Observer newObserver) 
{ 
//Do something here to add the new Observer to some list of Observers, maybe a 
//List<Observer> or something? 
} 

隨後的方法,在初始化過程中,你會很想很想打電話從EA的功能的addObserver ch Observer你希望看到它,並且在你的網絡類中有一些邏輯來通過調用他們的postUpdate函數來更新已註冊的每個人。在這種情況下,我表現得好像要發送一個包含新數據的字符串,這只是一個選項。您也可以讓它通過任何東西,只是通知發生了更新,在這種情況下,觀察者將負責檢查他們關心的網絡數據是否發生了變化;或者你可以讓它傳遞一些數據來表示網絡上已經更新了什麼,這樣班級就可以知道它是否關心發生了什麼變化(例如,如果唯一的變化是發生在聊天數據上的話,遊戲板可能不在乎,所以它不會做任何事情)。

您可能會發現在書籍方面的最佳成功調查Head First Design Patterns。

+0

謝謝。你的意見非常有幫助。 – iTEgg 2010-05-05 18:22:47

1

觀察者模式通常被稱爲Java中的事件監聽器。你也可能想要搜索。

你的想法似乎有效,雖然你需要在更多的技術細節上鑽研。你使用RMI,Caucho,HTTPInvoker實現你的網絡通信嗎?

無論如何,你需要遊戲「服務器」才能夠向所有玩家發佈更新。這可以使用輪詢或通過網絡傳遞對象來實現。

在StackOverflow上有一些很好的參考資料 - check this onethat one also。這應該讓你去。