假设有一个初始方案,之后我将成为有问题的修改案例。

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所述,您似乎将两种类型的登录混搭到一个对象中,这就是为什么首先要问这个问题的原因。按照他的建议将其拆分,那么您就不会遇到这个问题。

07-24 21:42