In this chapter we discussed the following:
- What design patterns are and the benefits of using design patterns to design a system.
- How patterns are categorized into creational, structural, and behavioral patterns.
- The Singleton pattern and how it compares with Java and Kotlin implementations.
- Implementing the factory pattern.
- Implementing the observer pattern.
- Implementing the decorator and handler patterns.
- Selecting appropriate patterns for the problem that we are trying to solve.