Questão de Arquitetura de Software — Padrões de projeto (Design Patterns) — FCC 2025
Arquitetura de Software›Padrões de projeto (Design Patterns)
Código
fc073229
Banca
FCC
Órgão
Prefeitura de São Paulo - SP
Ano
2025
Nível
Superior
Cargo
Analista de Planejamento e Desenvolvimento Organizacional Tecnologia da Informação e Comunicação
A equipe de desenvolvimento de uma prefeitura está refatorando um sistema legado de atendimento ao público e precisa utilizar o padrão Factory Method para criar diferentes tipos de objetos relacionados a solicitações (como solicitações de manutenção, serviços ou emergências). A prática de implementação que reflete adequadamente o padrão Factory Method com foco em extensibilidade e encapsulamento é
Acriar um método estático para instanciar objetos de solicitações com base em parâmetros fornecidos.
Bdelegar a criação de objetos para um método de inicialização dentro da própria classe principal.
Ccriar uma classe base que contenha a lógica para determinar o lipo de solicitação e retornar a instância apropriada.
Dcentralizar a criação de objetos em uma única classe utilitária que contém métodos estáticos para cada lipo de solicitação.
Eutilizar classes abstratas ou interfaces para definir o método de criação e implementá-lo nas subclasses especificas.
Revelar gabarito e comentário▾
GabaritoE — utilizar classes abstratas ou interfaces para definir o método de criação e implementá-lo nas subclasses especificas.
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”.
Factory Method
Gabarito: letra E. O Factory Method é um padrão criacional que define uma interface (ou classe abstrata) para criar objetos, permitindo que as subclasses decidam qual classe concreta instanciar. A alternativa E descreve exatamente essa estrutura: "utilizar classes abstratas ou interfaces para definir o método de criação e implementá-lo nas subclasses específicas". Isso encapsula a criação e promove extensibilidade.
Alternativa
Descrição
Padrão Correspondente
Correta?
A
Método estático que instancia objetos com base em parâmetros
Simple Factory (Método Fábrica Estático)
❌
B
Método de inicialização dentro da própria classe principal
Nenhum padrão formal
❌
C
Classe base com lógica para determinar tipo e retornar instância
Método Fábrica simples (não Factory Method)
❌
D
Classe utilitária única com métodos estáticos para cada tipo
Utility Class / Static Factory
❌
E
Classes abstratas ou interfaces para definir método de criação, implementado nas subclasses
Factory Method
✅
Factory Method: Creator (abstrato/interface) (FactoryMethod()); ConcreteCreator (Implementa FactoryMethod(), Decide qual classe concreta); Product (interface); ConcreteProduct
Alternativa A — ❌ Incorreta
Criar um método estático que recebe parâmetros e retorna objetos é o Simple Factory (ou Método Fábrica Estático), não o padrão Factory Method. O Simple Factory não permite que subclasses alterem o tipo de objeto criado, violando o princípio de aberto/fechado.
Alternativa B — ❌ Incorreta
Delegar a criação para um método de inicialização dentro da própria classe principal não constitui um padrão de projeto formal. Não há hierarquia de criação nem possibilidade de extensão por subclasses.
Alternativa C — ❌ Incorreta
Ter uma classe base que contém a lógica para determinar o tipo de solicitação e retornar a instância apropriada é uma implementação de Método Fábrica simples, mas não o Factory Method. No Factory Method, a lógica de decisão fica nas subclasses (ConcreteCreator), não na classe base.
Alternativa D — ❌ Incorreta
Centralizar a criação em uma única classe utilitária com métodos estáticos é outro padrão, como Utility Class ou Static Factory, mas não o Factory Method. Isso dificulta a extensão e viola o encapsulamento.
Alternativa E — ✅ Correta ⟵ GABARITO
A descrição corresponde exatamente ao Factory Method: uma classe abstrata/interface (Creator) declara o método de criação, e as subclasses concretas (ConcreteCreator) implementam esse método para retornar objetos específicos (Product). Isso permite extensibilidade sem modificar o código existente.