Padrão de Projeto Factory Method
Gabarito: letra C. O padrão Factory Method é o mais adequado para o cenário descrito, pois encapsula a criação de objetos (documentos) e permite que novos tipos sejam adicionados por meio de subclasses, sem alterar o código existente. Isso atende aos requisitos de modularidade e isolamento de mudanças.
A questão testa o conhecimento dos padrões de projeto GoF, em especial os criacionais. O sistema precisa permitir a adição de novas funcionalidades (tipos de documento) de forma modular, sem que alterações em um tipo afetem o sistema como um todo – exatamente o problema que o Factory Method resolve: ele define uma interface para criar um objeto, mas deixa que as subclasses decidam qual classe instanciar.
Padrão de Projeto | Categoria (GoF) | Problema que Resolve | Aplicação ao Cenário | Adequado? |
|---|
Factory Method | Criacional | Encapsular a criação de objetos, permitindo que subclasses decidam qual classe instanciar | Permite adicionar novos tipos de documento (petições, sentenças, relatórios) sem modificar o código existente, promovendo modularidade | ✅ Sim |
Singleton | Criacional | Garantir uma única instância de uma classe e fornecer acesso global a ela | Não resolve a necessidade de criar diferentes tipos de documento de forma modular | ❌ Não |
Adapter | Estrutural | Converter a interface de uma classe em outra interface esperada pelo cliente | Não se aplica à criação modular de novos tipos de documento | ❌ Não |
Composite | Estrutural | Compor objetos em estruturas de árvore para representar hierarquias parte-todo | Útil para manipular conjuntos de documentos, mas não para criar novos tipos | ❌ Não |
Decorator | Estrutural | Atribuir responsabilidades adicionais a um objeto dinamicamente | Adiciona funcionalidades, mas não resolve a criação de novos tipos de documento | ❌ Não |
Alternativa A — ❌ Incorreta
Singleton garante que uma classe tenha apenas uma instância e fornece um ponto global de acesso. Não resolve a necessidade de adicionar novos tipos de documentos modularmente; é um padrão de criação focado em instância única.
Alternativa B — ❌ Incorreta
Adapter converte a interface de uma classe em outra interface esperada pelos clientes, permitindo que classes incompatíveis trabalhem juntas. Não se aplica à criação modular de novos tipos de documentos.
Alternativa C — ✅ Correta ⟵ GABARITO
Factory Method define uma interface para criação de objetos, delegando a instanciação a subclasses. Permite adicionar novos tipos de documento (novas subclasses de produto) sem modificar o código cliente, promovendo modularidade e isolamento de mudanças – exatamente o que o sistema precisa.
Alternativa D — ❌ Incorreta
Composite compõe objetos em estruturas de árvore para representar hierarquias parte-todo, permitindo que clientes tratem objetos individuais e composições de forma uniforme. Útil para manipulação de conjuntos, mas não para criação modular de novos tipos.
Alternativa E — ❌ Incorreta
Decorator atribui responsabilidades adicionais a um objeto dinamicamente, fornecendo uma alternativa flexível à subclasse para extensão de funcionalidade. Embora adicione funcionalidades, não resolve a criação de novos tipos de documentos; é estrutural, não criacional.
Conclusão: O padrão mais apropriado para o sistema descrito é o Factory Method, portanto a resposta correta é a letra C.