我正在为我的机器人团队开发轻量级数据/指标记录器。我需要能够在任何给定的时间点从传感器或开关检索数据,我想让它们成为我想要的任何原始数字。
目前,我有一个受保护的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 :(得分:0)
正如@BoristheSpider所建议的那样,我使用了访问者模式(当我刚开始时,这是一个外国概念)。它似乎运作得很好 - 我创建了LoggableVisitor
来处理与Loggable
的关系。接下来,我向logData(LoggableVisitor)
接口添加了Loggable
方法。代码尚未经过测试,但它已经清理了很多。再次感谢您向我介绍访客概念!