In this chapter, we presented the most common software design patterns in object-oriented programming. It's worth mentioning that Kotlin also supports elements of functional programming that allow for a more concise way of implementing patterns such as strategy or observer. This chapter contains examples and diagrams that show how and in which case we should use patterns.
In the next chapter, we'll introduce coroutines as lightweight threads.