Builder
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've seen 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>?, &...