In our last blog, we have discussed the Decorator design pattern with Scala.
In this blog, we will explore the Adapter design pattern. We will also implement this pattern in Scala.
Earlier, in many applications, all the user-specific details like username, IP addresses, phone number, etc were logged directly without scrambling it. But after new data protection law i.e. EUGDPR, it is now mandatory to scramble any user-specific data.
So, we need to change the logging logic for all such applications.
In order to do this, we will add some extra methods to our logging framework.
We all know that most of our applications are generally flooded with logging statements and replacing all the statements with new method names, is not logically and practically possible.
So, what can we do now? 🤔
So here, the Adapter design pattern comes into the picture.
What is the Adapter design pattern?
Convert the interface of a class into another interface clients expect. Adapter
lets classes work together that could not otherwise because of incompatible
interfaces. Adapter is also known as wraper.
Solution to our problem:
We will change our existing logger framework to a framework, which supports methods like scrambledInfo(), scambledError(), scrambledDebug(), etc.
We will create a LoggerAdapter class which will adapt or wrap ScrambledLogger and whenever client call info method, it will call the scrambledInfo method and will do same for the methods debug, error etc.
Client class is the class which will actually call the logging methods.
The LoggerHelper trait is an existing trait in which all the required logging methods are declared.
Now, ScrambledLogger is the new class which will scramble all the logs before logging. It is basically an Adaptee.
LoggerAdapter is the class which will act as an interface between our Client and our adaptee class ScrambledLogger.
- We are using following dependency for Logger:
libraryDependencies += "log4j" % "log4j" % "1.2.17"
- ScrambledLogger is also somehow using the Proxy design pattern. Which we will discuss in the upcoming blog.
Hope you liked the blog 🙂