3.2 Flyweight

The goal of the flyweight pattern is to minimize resource consumption by reusing as much functionality as possible. The basic concept in the flyweight implementation is caching. Every time we need to create a specific instance of a type, we store it for later reuse.