假设有一个初始方案,之后我将成为有问题的修改案例。
interface Logger {
log() { }
}
class LogFile extends Logger {
log() { // log to file }
}
class LogDB extends Logger {
log() { // insert log into DB }
}
现在,LogDB变为类似以下内容:
class LogDB {
logMySQL() { };
logMongo() { };
}
在我仍希望它适合Logger界面的同时,如何将该更改合并到LogDB中?
最佳答案
如果LogDB
需要实现Log
,但还必须执行一些自定义日志记录,则添加一个函数,该函数可以执行接口要求的常规日志记录活动,并从每个自定义版本中调用(反之亦然,具体取决于您的需求):
public void log() {
//Common logging stuff here
}
public void logDB() {
//Database-specific logging here...
log();
}
public void logMongo() {
//Mongo-specific logging here...
log();
}
但是正如@kocko所述,您似乎将两种类型的登录混搭到一个对象中,这就是为什么首先要问这个问题的原因。按照他的建议将其拆分,那么您就不会遇到这个问题。