Builder Design Pattern

Learn the Builder design pattern in Kotlin and how to create complex objects using a number of parameters.

We'll cover the following...

Sometimes, our objects are very simple and have only one constructor, be it an empty or non-empty one. But sometimes, their creation is very complex and based on a lot of parameters. We know one pattern already that provides a better constructor—the Static Factory Method design pattern. Now, we’ll discuss the Builder design pattern, which will help us create complex objects.

As an example of such an object, imagine we need to design a system that sends emails. We won’t implement the actual mechanism of sending them, we will just design a class that represents it.

An email may have the following properties:

  • An address (at least one is mandatory)
  • CC (optional)
  • Title (optional)
  • Body (optional)
  • Important flag (optional)

We can describe an email in our system as a data class:

data class Mail_V1(
val to: List<String>,
val cc: List<String>?,
val title: String?,
val message: String?,
val important: Boolean,
)
Data class representing an email message

Note: Look at the definition of the last argument in the preceding code. This comma is not a typo. It is called a trailing comma, and these were introduced in Kotlin 1.4. This is done so we can easily change the order of the arguments. ...