我正在开发一个具有客户端和服务器的应用程序。当客户端收到数据包时,它需要通知任何屏幕对象需要什么数据包(例如登录屏幕只对有关登录的数据包感兴趣)。
目前我已经设置了系统,因此所有屏幕对象都会收到任何即将发送的数据包的通知。然后每个屏幕检查以查看通过的数据包是否适用于它自己。
我想知道是否有人知道任何方式,而不是每个屏幕对象都在监听每个数据包,网络监听器只是发送屏幕正在监听的数据包。 (这样我就不必有100个if语句来检查来自的数据包是a,b,c,d,e,f)。我可以通过为每个数据包实现一个新事件来做到这一点,但这可能会很快变得混乱。
任何有关此事的帮助都会令人惊叹。
答案 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语句。