Decorator
In the previous chapter, we discussed the Prototype design pattern, which allows us to create instances of classes with slightly (or not so slightly) different data. 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 (which we will explain in this chapter), you 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 the goal of this chapter is to discuss 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...