Composite
Where there is a need to assemble objects from primitive ones.
Where there is a need to represent part-whole hierarchies.
GUI components, syntax trees, file systems, nested projects/portfolios, macro commands.
Extensibility: It’s easy to add new primitive objects that can be assembled into composites. Components get treated the same regardless of complexity.
Plurality is hidden from clients through a common with the leafs interface.