2012-10-19 57 views
0

我必须编写一个代码来从一些原始GPS消息中提取数据。它们不是NMEA,它们是二进制信息。二进制消息的推荐设计模式

消息的数量和类型是固定的,将来不会改变,所以也许我不需要设计模式,我想找一个优雅的解决方案。

任何建议/示例?我必须用C++编写代码,但无论如何伪代码是好的

回答

0

我建议你编写一些类的层次结构,其中包含所有共享属性的GpsMessage基类。
我假设这样一个类将包含一个二进制缓冲区域
,也许还有一个类型域。
您将拥有此基类的子类,提供方法,为每条消息设置特定数据并检索它。
您可以考虑让每个特定消息的属性从基本属性类继承。
在这种情况下,您将能够定义一个工厂来创建消息,并传递一个MessageAtribute数组作为创建参数。例如(并原谅我错误的C + +语法,我没有用C++编码一段时间)。

GpsAtrribute* pAttrbitues = new GpsAttribute[5]; //the message is going to have 5 //attributes , fill these attributes 
GpsMessage message = GpsMessageFactory::GetInstance().createMessage(GpsCommandType.COMMAND_TYPE_1,pAttributes); 

然而,裸记住,这种方法需要工厂的用户了解每个命令的属性号。
既然您提到已知各种类型的消息,
您可以在出厂时添加一个方法,以便根据GPS命令类型创建参数数组。
因此,代码会看起来像:

GpsAtrribute* pAttrbitues = GpsMessageFactory::GetInstance().createAttributes(GpsCommandType::COMMAND_TYPE_1);//attributes , fill these attributes 
    GpsMessage message = GpsMessageFactory::GetInstance().createMessage(GpsCommandType::COMMAND_TYPE_1,pAttributes); 

我还建议增加对命令的一些验证代码来检查属性设置正确。