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

目前,我已经建立了系统,以便所有屏幕对象都收到即将到来的数据包的任何通知。然后,每个屏幕检查以查看传入的数据包是否适用于其自身。

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

在这件事上的任何帮助都将是惊人的。

最佳答案

这可以解决您的问题。
创建一个接口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语句。

关于java - Java观察者模式如何处理大量事件,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/15753541/

10-14 12:07
查看更多