Definir uma interface para criar um objeto, mas deixar as s...

Próximas questões
Com base no mesmo assunto
Q148604 Arquitetura de Software
Definir uma interface para criar um objeto, mas deixar as subclasses decidirem que classe instanciar. Permite adiar a instanciação para subclasses.

Qual opção abaixo corresponde à descrição anterior?
Alternativas

Gabarito comentado

Confira o gabarito comentado por um dos nossos professores

A alternativa correta é a B - Intenção do padrão de projeto factory method.

Vamos entender por que essa é a alternativa correta e analisar as demais opções.

Intenção do padrão de projeto Factory Method: O enunciado descreve a necessidade de definir uma interface para criar um objeto, mas deixar as subclasses decidirem qual classe instanciar. Isso é exatamente o que o padrão de projeto Factory Method faz. Ele permite que a instanciação de objetos seja delegada para subclasses, de forma que a classe base define o método de criação, mas é a subclasse que decide qual objeto concreto será criado. Esse padrão é útil quando uma classe não pode antecipar a classe de objetos que deve criar.

Alternativa A - Intenção do padrão de projeto Builder: O padrão Builder é utilizado para construir objetos complexos passo a passo. Ele separa a construção de um objeto da sua representação, permitindo que o mesmo processo de construção possa criar diferentes representações. Portanto, não se trata de delegar a escolha da classe concreta para subclasses, mas sim de estruturar a construção de um objeto complexo.

Alternativa C - Intenção do padrão de projeto Abstract Factory: O padrão Abstract Factory fornece uma interface para criar famílias de objetos relacionados ou dependentes sem especificar suas classes concretas. Ele é mais abrangente que o Factory Method, pois permite a criação de múltiplos tipos de objetos. No entanto, a questão específica trata apenas da decisão de qual classe instanciar, que é uma característica do Factory Method.

Alternativa D - Intenção do padrão de projeto Strategy: O padrão Strategy define uma família de algoritmos, encapsula cada um deles e os torna intercambiáveis. O Strategy permite que o algoritmo varie independentemente dos clientes que o utilizam. Portanto, este padrão não tem relação direta com a criação de objetos e a delegação da decisão de qual classe instanciar para subclasses.

Alternativa E - Intenção do padrão de projeto Composite: O padrão Composite compõe objetos em estruturas de árvore para representar hierarquias parte/todo. Ele permite que os clientes tratem objetos individuais e composições de objetos de maneira uniforme. Este padrão também não se relaciona com a criação de objetos e a delegação da decisão para subclasses.

Em resumo, a questão aborda a necessidade de um padrão de projeto que permita delegar a decisão de qual classe instanciar para as subclasses, o que é exatamente o que o Factory Method faz. Por isso, a alternativa B está correta.

Clique para visualizar este gabarito

Visualize o gabarito desta questão clicando no botão abaixo

Comentários

Veja os comentários dos nossos alunos

A confusão aí pode ser entre o padrão Factory Method, Builder e Abstract Factory.

Factory Method:
Você define uma interface como por exemplo
ArquivoCompactado
Esse arquivo compactado tem as operações de
extrair( ) 
listar( )

Mas pode ser que se trata de um arquivo zip, ou rar, ou tar, ou tar.gz...

Então você faz algo como

ArquivoCompactado meuArquivo = Factory.createArquivo( "umarquivo.rar" );


Builder:
O padrão builder é responsável pela criação de um objeto complexo, de acordo com a necessidade da aplicação.
Por exemplo, uma aplicação tem que gerar dois formularios diferentes, de acordo com o perfil do usuário cadastrado. 
Se o usuário for particular, deve mostrar cpf, estado civil, filhos, salário, etc... Se for empresa deve mostrar cnpj, razão social, nome fantasia, etc...
O padrão builder vai abstrair a construção do objeto Formulario, por exemplo.

Abstract Factory:
Constrói uma familia de objetos sem especificar suas classes concretas.
Por exemplo, interfaces gráficas.
Você pode programar Janelas, Botões, Widgets, como classes abstratas e escolher que o Abstract Factory devire isso para classes concretas de um tema Dark, ou tema Mac, ou o tema Rebeldes... Etc.

Gabarito: B

Factory Method

======= RESUMO =====

COMPORTAMENTAIS

TSIO Chain State Visita e Interpreta Comando Med Mem

 

* Strategy: define uma família de algoritmos, encapsula cada um, e faz deles intercambiáveis.

* Chain of Responsibility: encadeia os objetos receptores, passando a solicitação ao longo da cadeia até que um objeto a trate.

* Iterator: acessar sequencialmente os elementos de um objeto.

* State: permite que um objeto mude o seu comportamento quando o seu estado interno mudar.

* Command: encapsula uma requisição como um objeto, deixando-o parametrizar clientes com diferentes requisições.

* Observer: quando um objeto muda de estado, todos os seus dependentes são notificados e atualizados automaticamente.

* Visitor: representa uma operação a ser executada sobre os elementos da estrutura de um objeto.

* Memento: captura e externaliza o estado interno de um objeto, de forma que ele possa ser recuperado depois.

* Mediator: encapsula a forma como um conjunto de objetos interage.

* Template Method: esqueleto de um algoritmo em uma operação, deferindo alguns passos para as subclasses.

* Interpreter: dada uma linguagem, define uma representação para sua gramática juntamente com um interpretador para as sentenças dessa linguagem.

== CRIACIONAIS ==

Prototype FAB Singleton

* Abstract Factory: interface para criar famílias de objetos relacionados.

* Builder: criação de objeto complexo com representações diferentes, construindo partes de objetos passo a passo.

* Factory Method: define uma interface para criar um objeto, mas deixa as subclasses decidirem qual classe instanciar.

* Prototype: cria objetos usando uma instância prototípica (clone).

* Singleton: garante que uma classe possua apenas uma única instância e provê um ponto de acesso global a ela.

== ESTRUTURAIS ==

AFF Puta e Bridge Decora Composto

 

* Adapter: converte a interface de uma classe em outra .

 

* Bridge: desacopla uma interface de sua implementação.

 

* Composite: compõe zero ou mais objetos similares de forma que eles possam ser manipulados como um só (montagem de árvore).

 

* Decorator: anexa responsabilidades adicionais a um objeto dinamicamente.

 

* Proxy: substituto ou ponto de acesso através do qual um objeto possa controlar o acesso a outro.

 

* Façade: interface unificada para um conjunto de interfaces de um subsistema.

 

* Flyweigth: usa compartilhamento para suportar grandes quantidades de objetos, tornando o objeto mais leve que o original.

Clique para visualizar este comentário

Visualize os comentários desta questão clicando no botão abaixo