Java观察者模式如何处理大量事件

时间:2013-04-01 23:15:55

标签: java observer-pattern

我正在开发一个具有客户端和服务器的应用程序。当客户端收到数据包时,它需要通知任何屏幕对象需要什么数据包(例如登录屏幕只对有关登录的数据包感兴趣)。

目前我已经设置了系统,因此所有屏幕对象都会收到任何即将发送的数据包的通知。然后每个屏幕检查以查看通过的数据包是否适用于它自己。

我想知道是否有人知道任何方式,而不是每个屏幕对象都在监听每个数据包,网络监听器只是发送屏幕正在监听的数据包。 (这样我就不必有100个if语句来检查来自的数据包是a,b,c,d,e,f)。我可以通过为每个数据包实现一个新事件来做到这一点,但这可能会很快变得混乱。

任何有关此事的帮助都会令人惊叹。

1 个答案:

答案 0 :(得分:1)

这可能是您问题的解决方案。 创建一个接口Packet:

public interface Packet {
  public void callListener();
}

对于每个数据包,创建一个实现 Packet 的类。例如,要管理登录数据包,您可以创建 LoginPacket 类:

public class LoginPacket implements Packet{
  public void callListener() {
    ListenerLogin.notify(this);
            //you can add additional Listeners

  } 
}

在主要类 Reader 读取时,数据包会调用特定的侦听器:

public class Reader{
  public void parse(Packet p) {
   p.callListener();
}
}

这样, parse 方法中不需要任何if / else语句。