Adapter design pattern with Scala

AdapterFeaturedImage

Hi Readers!
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.
But wait!
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.

adapterDesignUml

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 debugerror etc.

Flow chart- Adapter Design pattern

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.

Note:

  1. We are using following dependency for Logger:
    libraryDependencies += "log4j" % "log4j" % "1.2.17"
  2. ScrambledLogger is also somehow using the Proxy design pattern. Which we will discuss in the upcoming blog.

Hope you liked the blog 🙂

References:

  • https://www.scala-lang.org/old/sites/default/files/FrederikThesis.pdf
  • https://sourcemaking.com/design_patterns/adapter


knoldus-advt-sticker

 

Written by 

Nancy jain is a software consultant with experience of more than 6 months. She likes to explore new technologies and trends in the IT world. Her hobbies include watching web series, writing and travelling. Nancy is familiar with programming languages such as Java, Scala, C, C++, HTML, Javascript and she is currently working on reactive technologies like Scala, DynamoDb, AkkaHttp.

1 thought on “Adapter design pattern with Scala

Leave a Reply

%d bloggers like this: