2015-02-10 51 views
2

我正在为我的机器人团队开发轻量级数据/度量记录器。我需要能够在任何给定的时间点从传感器或开关中检索数据,并且我想让它们成为我想要的任何原始数字。将任何原始数字的原始字节记录到文件中

目前,我有一个受保护的Loggable接口,它具有单一方法Object getLogData()。对于不同的原始类型有几个公共子接口。它们中的每一个都可以注册到Logger(添加到List<Loggable>)以在运行时访问数据。

这是从Loggable类测井数据当前,未经测试的代码:

loggables.forEach((loggable) -> { 
    if (loggable instanceof ByteLoggable) { 
     writer.write((Byte) loggable.getLogData()); 
    } else if (loggable instanceof ShortLoggable) { 
     writer.writeShort((Short) loggable.getLogData()); 
    } else if (loggable instanceof IntLoggable) { 
     writer.writeInt((Integer) loggable.getLogData()); 
    } else if (loggable instanceof LongLoggable) { 
     writer.writeLong((Long) loggable.getLogData()); 
    } else if (loggable instanceof FloatLoggable) { 
     writer.writeFloat((Float) loggable.getLogData()); 
    } else if (loggable instanceof DoubleLoggable) { 
     writer.writeDouble((Double) loggable.getLogData()); 
    } else { 
     throw new IllegalArgumentException("Unknown loggable type: " + loggable); 
    } 
}); 

此块似乎很笨重,我 - 我觉得有一个更简单的做到这一点,我可以”的方式想想。有没有人有任何想法?

+0

我不认为有一个在Java中。可能有一个图书馆。 – immibis 2015-02-10 20:38:07

+0

使用包含多个日志方法的包装来获取特定的数据类型? – 2015-02-10 20:39:34

+2

访客模式可能在这里工作。让'作家'成为访问者。 – 2015-02-10 20:44:24

回答

0

正如@BoristheSpider所建议的,我使用了访问者模式(当我第一次开始时,这是一个外国概念)。它似乎工作得很好 - 我创建了一个LoggableVisitor,它处理与Loggable的关系。接下来,我添加了一个logData(LoggableVisitor)方法到Loggable接口。代码还没有经过测试,但它已经清理了很多。再次感谢您向我介绍访问者的概念!

+0

如果您发布您编写的代码,则会显示转换。它还将在未来帮助更多人。甚至可能会吸引一些最后的选票......无可否认,我会让'logData'方法采用'编写器',或者理想情况下,它实现一些'接口'。但这取决于'Loggable'是否应该知道'writer'。 – 2015-02-11 08:12:40