Sometimes, we have to work with data that is organized into a tree structure. There is an entry point, an object of some class N, which owns other objects of the same class N or objects of class L. We call this entry point a root, class N, an inner node, and L, a leaf.
When we perform some operation on such compound data, it is helpful if we can treat all objects the same. In other words, we don't want to distinguish between a root, an inner node, and a leaf. The composite pattern allows us to treat all types of components the same.
Imagine an irrigation system. At some point, it is connected to a water supply. The irrigation system can then split into multiple branches that end in different kinds of water dispensers. We don't care much about that complicated structure, as all components of the system implement the same interface: you put the water in and it...