Flyweight

Use sharing to support large numbers of fine-grained objects efficiently.
Applicability
- An application uses a large number of objects
- Storage costs are high because of the sheer quantity of objects
- Most object state can be made extrinsic
- Many groups of objects may be replaced by relatively few shared objects
once extrinsic state is removed
- The application doesn't depend on object identity
Consequences
- Reduces the number of instances
- Most of the state must be extrinsic