Decorator Design Pattern
Learn how to implement the Decorator design pattern and the Elvis operator in Kotlin.
We'll cover the following...
In Prototype design pattern, we can create instances of classes with slightly (or not so slightly) different data. But, this raises a question:
What if we want to create a set of classes that all have slightly different behavior?
Well, since functions in Kotlin are first-class citizens, we could use the Prototype design pattern to achieve this aim. After all, creating a set of classes with slightly different behavior is what JavaScript does successfully. But there is another approach to the same problem. After all, design patterns are all about approaches.
By implementing the Decorator design pattern, we allow the users of our code to specify the abilities they want to add.
Enhancing a class
Let’s say that we have a rather simple class that registers all of the captains in the Star Trek universe along with their vessels:
open class StarTrekRepository {private val starshipCaptains = mutableMapOf("USSEnterprise" to "Jean-Luc Picard")open fun getCaptain(starshipName: String): String {return starshipCaptains[starshipName] ?: "Unknown"}open fun addCaptain(starshipName: String, captainName:String) {starshipCaptains[starshipName] = captainName}}
One day, your captain—sorry, scrum master—comes to you with an urgent requirement. From now on, every time someone ...