我正在开发一个简单的多播网络程序,并且对最适合客户端/服务器或客户端/客户端网络的最佳类结构和OOD模式感到好奇。我的困境是我将通过数据报发送不同类型的消息,接收器只看到一堆字节。现在,我已经实现了一种“ID”占位符作为我所有字节数组的第一个字节,以区分包含“hello world”的消息和包含用户坐标的消息。唯一的选择似乎是根据“ID”的内容在我的“接收”方法中只有一大组case语句,但这似乎是不好的做法。只是寻找想法来利用Java的OOD模式和全面的良好编码实践。
在旁注(我认为这有点相关......)对我来说,改为对象流是否有利?在我看来,我仍然会检查每一个进来的instancof。谢谢!
答案 0 :(得分:2)
有几种可能性,但Strategy Pattern似乎最适合该法案。
在您的情况下,我将创建一个至少包含两个方法的接口,以确定该类是否可以处理该消息(将检查您的ID位),另一个是否实际处理该消息。然后为每种类型的消息创建一个单独的消息处理类。
您的传入消息处理程序将具有这些消息处理对象的集合或列表(通常是每个不同的类,但所有这些对象都实现了该接口)。收到消息后,消息处理程序将遍历消息处理对象,直到找到消息为止,如果没有消息处理器将处理消息,则会发出错误。
答案 1 :(得分:2)
根据具体情况,这里有一些选择。
您当然可以发送序列化对象,每种消息类型一个。序列化Java对象通常只能在Java应用程序之间工作,但您也可以尝试使用协议缓冲区来实现可互操作的对象(http://code.google.com/p/protobuf/)
您可以以JSON或XML等可互操作的格式发送文档
您可以自己制作格式,并根据需要解析文本
我,我可能会使用Protocol Buffers