Trata-se de um padrão de projeto que define um conjunto de algoritmos, encapsula-os e os torna intercambiáveis por meio do relacionamento de composição, permitindo que o algoritmo varie em tempo de execução, independentemente dos clientes que o utilizam. De que padrão de projeto se trata?