Summary
In this chapter, we went into detail on several more design patterns, covering their canonical descriptions as well as alternatives for implementing them in Python, which is often more flexible and versatile than traditional object-oriented languages. In particular, we covered:
The adapter pattern for matching interfaces
The facade pattern for simplifying complex systems
The flyweight pattern for reducing memory consumption
The command pattern for isolating invokers
The abstract factory pattern for separating implementation
The composition pattern for tree-like structures
In the next chapter, we'll cover some of the common tools for manipulating files, configuration, and processes.