Uma situação comum em modelagem de software é ter de representar estruturas do tipo hierarquias parte-todo. Documentos, diretórios de pastas e arquivos, peças mecânicas, interfaces gráficas, são exemplos de situações cuja modelagem pode levar a esse tipo de estrutura.
Em termos de modelos de objetos, é sempre possível ter uma modelagem específica para cada situação que deve ser representada. No entanto, além de ineficiente, esse tipo de solução pode levar a modelagens complexas.
Considere o seguinte exemplo, inspirado na definição de interfaces gráficas com usuários. Há uma série de componentes que podem ser usados para construir uma janela de uma aplicação gráfica, incluindo painéis (sub-janelas). Um modelo simples para tal situação poderia ser:
O padrão de projeto indicado para esse tipo de situação é o Composite. Através da inclusão de duas classes abstratas, uma para o componente simples e outra para o composto (esta derivada do componente simples), essa solução trata objetos simples e compostos de maneira uniforme, capturando de forma elegante o problema da composição e da recursão. A estrutura abaixo ilustra a utilização deste padrão de projeto no contexto do pacote java.awt da linguagem Java: