Java Inter Application Form Communication Observer Pattern

时间:2010-05-05 17:29:08

标签: java communication observer-pattern

观察者模式?我在哪里可以用Java获得这个例子(我知道谷歌,但也希望有一些个人见解。)

正确解释我的问题:

我有3个窗体/窗口。 “board”是作为应用程序加载的主要形式。

“聊天”是文字聊天的地方。

“network”是建立网络连接的地方。

我让游戏(connect4)在本地工作,我也希望实现它的网络版本。

我的想法是,可能与Observer模式有关,在运行期间有一个线程(或某事)监视网络状态,并更新当前网络状态的聊天和电路板形式,以及从网络传递接收的数据。

我的想法有效吗?或者我应该如何在整个应用程序中建立网络和网络状态更新?

感谢您的意见。

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模式的书?

3 个答案:

答案 0 :(得分:1)

观察者模式通常在Java中称为事件侦听器。您可能也想搜索它。

您的想法似乎有效,但您需要在某些时候深入研究更多技术细节。您是使用RMI,Caucho,HTTPInvoker实现网络通信吗?

无论如何,您需要游戏“服务器”才能向所有玩家发布更新。这可以使用轮询或通过网络传递对象来实现。

StackOverflow上有一些很好的参考资料 - check this onethat one also。这应该让你去。

答案 1 :(得分:0)

在这种情况下,聊天和游戏窗口将被视为观察者。您需要实现一个名为Observers的接口(java API在java.util.Observer上有一个本机Observer模式,但您可以实现自己的)并让您的聊天和电路板窗口实现它们。你可能看起来像:

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

postUpdate是一个所有观察者都需要定义的函数,这些类和你想要包含的任何其他东西都需要实现Observer,如:

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?
}

然后,在初始化期间,您将希望从您想要观看它的每个Observer调用addObserver函数,并在您的网络类中使用一些逻辑来通过调用其postUpdate函数来更新已注册的每个人。在这种情况下,我的行为就好像你想要发送一个包含新数据的String,这只是一个选项。你也可以让它没有任何通过,只是作为更新发生的通知,在这种情况下,观察者将负责检查他们关心的网络数据是否已经改变;或者你可以让它通过一些数据来表示网络上已经更新的内容,这样该类就可以知道它是否关心已经发生了什么变化(例如,游戏板可能不关心是否唯一的变化发生在聊天数据上,所以它不会做任何其他事情。)

您可能会在书籍方面找到最佳成功调查Head First Design Patterns。

答案 2 :(得分:0)

我发现这个从Java角度学习GOF设计模式非常有用。我发现它比GOF书更容易访问,因为我是一名java开发人员。

http://www.amazon.com/Applied-Java-Patterns-Stephen-Stelting/dp/0130935387