The Flyweight design pattern is a structural design pattern that focuses on optimizing memory usage by sharing data between multiple objects. It is useful when you need to create a large number of similar objects that share common properties.
The main idea behind the Flyweight pattern is to separate the intrinsic (shared) and extrinsic (unique) parts of an object. The intrinsic part is immutable and can be shared among multiple objects, while the extrinsic part varies and is stored externally.