1

我正在解析来自 UDP 流的一些输入。该协议有点像二进制查询字符串。它会发送一个代码字节,告诉您如何读取以下字节。例如,代码值 1 可能意味着接下来的 4 个字节是一个旨在作为 ID 的 int,值 2 可能意味着接下来的 4 个字节是一个旨在成为 Velocity 的 int,值 3 可能意味着一个浮点数对于纬度,值 4 可能意味着下一个字节是一个长度为 int 的字符串。

是否有使用这些规则解析事物的设计模式?我敢肯定,必须有一些比在代码值上大开关更好的方法。我在 C# 中使用 BinaryReader,但我想有一个与语言无关的解决方案。

4

1 回答 1

0

您可能需要策略模式。每个 Strategy 实例都将知道如何解析它的数据类型和消耗多少字节,以及某种回调或构建器对象来处理读取的相关数据

interface for ReadStrategy{

  Read(Stream stream, MyObject obj);

}


class VelocityReader{

    Read(Stream stream, MyObject obj){
       //read 4 bytes as int.
       int value = stream.ReadInt32();
       myObj.setVelocity(value);
    }

}

您还需要一个工厂类来读取每条记录的第一个字节,以了解要使用哪种策略(可以实现为开关),或者如果您想使用更多模式,请在策略中添加一个方法以了解如何识别它自己的代码值是并用于Chain of Responsibility轮询每种策略类型以找到第一个可以处理代码值的策略类型。

于 2013-10-30T20:51:24.687 回答