【发布时间】:2018-02-14 06:56:56
【问题描述】:
我正在实施一个日志管理系统,并希望日志类型可以扩展。我们得到一个从 JSON(来自 Filebeat)解析的基础对象,例如:
class LogLine {
String message
Date timestamp
String type
String source
}
给定这个 LogLine 对象,我希望能够创建不同的对象,这些对象也将扩展这个 LogLine。
class SomeLog extends LogLine {
int myfield
String username
}
class SomeOtherLog extends LogLine {
Date startTime
Date endTime
String username
String transactionID
}
所以,在我目前的非理想实现中:
void parse(String s){
LogLine logLine = .....parseFromString(s)
if ( logline.type.equals('def') ){
SomeLog someLog = new SomeLog.Builder.build(logLine)
} else if ( logline.message.containts('abc') ){
SomeOtherLog someotherLog = new SomeOtherLog.Builder.build(logline)
}
}
但是,正如您可以想象的那样,子类中的构建器复制超类 LogLine 对象,无论如何我可以在不复制值的情况下做到这一点,因为它们已经是子类?有没有设计模式来实现这一点?我不想依赖像BeanUtils.copyProperperties这样的反射
【问题讨论】:
标签: java design-patterns polymorphism