In this chapter, we looked into aspect-oriented programming in Scala. We now know how to separate code that normally wouldn't be possible to move into modules. This will lead to avoiding code duplication and make our programs nice with different, specialized modules.
We also showed how to create reusable components using techniques we covered in the previous chapters of this book. Components provide interfaces and have specific requirements, which could be easily satisfied using the richness of Scala. They are really relevant to design patterns because they have the same purpose—to make the code better, avoid repetition, and be able to easily test it.
In the following chapters of this book, we will start looking at some concrete design patterns with their useful features and use cases. We will start with creational design patterns as they are defined by the...