Ao construir uma aplicação bancária, um projetista de
software modelou a classe “Conta”. Posteriormente,
percebeu que cada instância da classe “Conta” poderia
ter um conjunto de responsabilidades variadas e
independentes, sendo que uma requisição poderia ter que
ser atendida por uma ou várias dessas responsabilidades.
Isso não permitiria usar de forma eficiente o mecanismo
de subclasses para representar essas responsabilidades.
Buscando uma solução adequada para essa limitação,
o projetista encontrou um padrão de projeto que permite
adicionar e retirar dinamicamente responsabilidades
apenas aos objetos individuais, e não à classe inteira,
estendendo a funcionalidade do objeto, o que seria a
solução ideal para o seu caso.
Esse padrão de projeto específico tem uma estrutura comum, em que existe uma