Questão de Arquitetura de Software — Padrões de projeto (Design Patterns) — FCC 2015
- Código
- fc019771
- Banca
- FCC
- Órgão
- DPE-SP
- Ano
- 2015
- Nível
- Médio
- Cargo
- Programador
- APrototype
- BState.
- CAdapter.
- DSingleton.
- EFaçade.
GabaritoB — State.
Gabarito: letra B (State). O padrão State é ideal quando um objeto precisa alterar seu comportamento conforme seu estado interno muda, e a classe Context é a interface principal para requisições dos clientes. A descrição do enunciado — "mudança no estado lógico implica alteração no comportamento" — é a definição literal do State pattern, conforme os padrões GoF.
A questão testa o conhecimento dos padrões de projeto GoF e sua classificação (criacional, estrutural, comportamental). O State é um padrão comportamental de objeto. As demais alternativas ou são de outras categorias ou não atendem ao requisito de comportamento variável por estado.
Prototype é um padrão criacional que cria novos objetos clonando um protótipo existente. Não está relacionado a mudança de comportamento por estado.
State é um padrão comportamental que permite que um objeto altere seu comportamento interno quando seu estado muda. O objeto parece mudar de classe. A classe Context delega o comportamento ao estado corrente. O enunciado casa exatamente com essa definição.
Adapter é um padrão estrutural que converte interfaces incompatíveis para que classes possam trabalhar juntas. Não envolve estado ou comportamento dinâmico.
Singleton é um padrão criacional que garante uma única instância de uma classe. Não trata de mudança de estado ou comportamento.
Façade é um padrão estrutural que fornece uma interface simplificada para um subsistema complexo. Não lida com estados mutáveis.
Decore a classificação dos padrões GoF (criacionais, estruturais, comportamentais) e as frases-chave de cada um. State = "comportamento muda com o estado"; Strategy = "algoritmos intercambiáveis". Não confunda: ambos são comportamentais, mas State é dependente de estado interno, Strategy é independente.
Link permanente: /questoes/fc019771