The adapter design pattern with final classes

If we declare our original logger as final, we will see that our code will not compile. There is a different way to use the adapter pattern in this case. Here is the code:

class FinalAppLogger extends Log {  private val logger = new FinalLogger  override def info(message: String): Unit = logger.log(message, "info")  override def warning(message: String): Unit = logger.log(message,   "warning")  override def error(message: String): Unit = logger.log(message, "error")  override def debug(message: String): Unit = logger.log(message, "debug")}

In this case, we simply wrap the final logger inside a class and then use it to call the log method with different parameters. The usage is absolutely the same as ...

Get Scala Design Patterns - Second Edition now with the O’Reilly learning platform.

O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.