Questão de Arquitetura de Software — Padrões de projeto (Design Patterns) — FCC 2016
Arquitetura de Software›Padrões de projeto (Design Patterns)
Código
fc028409
Banca
FCC
Órgão
CREMESP
Ano
2016
Nível
Superior
Cargo
Analista de Tecnologia da Informação - Análise de Sistemas
Suponha que exista uma interface ITraduzFrase que define o método imprimeFrase(). Existem, também, as classes InglesTraduzFrase, EspanholTraduzFrase e AlemaoTraduzFrase que estendem a interface ITraduzFrase e utilizam o método imprimeFrase(). Um Analista utilizou um design pattern que cria objetos de forma dinâmica sem conhecer a classe de implementação. A classe FrasePadrao implementa esse padrão de forma que, de acordo com o idioma desejado, retorna um objeto do tipo ITraduzFrase. O objetivo é que, sendo fornecido o idioma, a frase será nele impressa, em inglês, espanhol ou alemão.Considerando o exemplo e sabendo que a definição do padrão é "Define uma interface para criar um objeto, mas permite às classes decidirem qual classe instanciar. Este padrão permite a uma classe deferir a instanciação para subclasses.", o nome do padrão usado pelo Analista é
AStrategy.
BFactory Method.
CSingleton.
DChain of Responsability.
EAdapter.
Revelar gabarito e comentário▾
GabaritoB — Factory Method.
Comentário gerado por IA. É um apoio ao estudo, ancorado em fontes, mas pode conter imprecisões — confira sempre na fonte oficial (lei, súmula, edital e gabarito da banca). Encontrou um erro? Use “Reportar”.
Padrões de Projeto (Design Patterns) — Factory Method
Gabarito: letra B. O enunciado descreve exatamente o padrão Factory Method, cuja definição é "Define uma interface para criar um objeto, mas permite às classes decidirem qual classe instanciar. Este padrão permite a uma classe deferir a instanciação para subclasses." A classe FrasePadrao atua como criador abstrato que, dado um idioma, retorna o objeto concreto correspondente sem que o cliente conheça a classe real — esse é o mecanismo central do Factory Method.
A questão cobra o reconhecimento do padrão a partir de sua descrição e aplicação prática. O Factory Method pertence à categoria dos padrões de criação (GoF), pois delega a instanciação a subclasses, promovendo baixo acoplamento e flexibilidade.
Padrão de Projeto
Categoria (GoF)
Propósito Principal
Aplicação no Exemplo
Correta?
Factory Method
Criação
Define interface para criar objeto, mas permite que subclasses decidam qual classe instanciar; delega a instanciação
FrasePadrao cria dinamicamente objetos ITraduzFrase conforme o idioma, sem o cliente conhecer a classe concreta
✅ (Gabarito)
Strategy
Comportamental
Define uma família de algoritmos intercambiáveis e encapsula variações de comportamento
Não se aplica: o foco não é algoritmo, mas criação de objetos
❌
Singleton
Criação
Garante que uma classe tenha apenas uma instância e fornece ponto global de acesso
Não se aplica: múltiplos objetos são criados (um por idioma), sem restrição de unicidade
❌
Chain of Responsibility
Comportamental
Permite passar uma solicitação ao longo de uma cadeia de handlers até que um a trate
Não se aplica: não há encadeamento de handlers no exemplo
❌
Adapter
Estrutural
Converte a interface de uma classe em outra interface esperada pelo cliente
Não se aplica: não há conversão de interfaces incompatíveis
❌
Factory Method (criação)
1Produto
ITraduzFrase (interface)
InglesTraduzFrase
EspanholTraduzFrase
AlemaoTraduzFrase
2Creator
FrasePadrao
Instancia sem conhecer classe concreta
LEVEL · soulevel.com.br
Alternativa A — ❌ Incorreta
Strategy é um padrão comportamental que define uma família de algoritmos intercambiáveis. Não se aplica à criação de objetos; seu foco é encapsular variações de comportamento. A classe FrasePadrao não está definindo algoritmos — está instanciando objetos com base em um parâmetro.
Alternativa B — ✅ Correta ⟵ GABARITO
Factory Method encaixa perfeitamente: a interface ITraduzFrase é o produto, as classes InglesTraduzFrase, EspanholTraduzFrase, AlemaoTraduzFrase são produtos concretos, e FrasePadrao é o creator que implementa o método de fábrica para retornar o tipo adequado. A definição fornecida no enunciado é a literal do padrão.
Alternativa C — ❌ Incorreta
Singleton garante que uma classe tenha apenas uma instância e fornece um ponto global de acesso a ela. No exemplo, são criados múltiplos objetos (um para cada idioma), e não há restrição de unicidade.
Alternativa D — ❌ Incorreta
Chain of Responsibility (Corrente de Responsabilidade) é um padrão comportamental que permite passar uma solicitação ao longo de uma cadeia de handlers até que um a trate. Não envolve criação de objetos; o exemplo não tem encadeamento.
Alternativa E — ❌ Incorreta
Adapter é um padrão estrutural que converte a interface de uma classe em outra interface esperada pelo cliente, permitindo que classes incompatíveis trabalhem juntas. No caso, não há incompatibilidade de interfaces — as classes já implementam ITraduzFrase diretamente.
PEGA ESSA DICA!
Para diferenciar os padrões de criação (como Factory Method) dos comportamentais e estruturais, lembre-se: criação = como os objetos são instanciados; estrutura = como classes/objetos são compostos; comportamento = como eles interagem e distribuem responsabilidades. Na prova, grife palavras como "cria objetos", "instancia", "delega a criação a subclasses" — isso aponta para um padrão criacional.