FactoryMethod Flashcards

1
Q

Intenção

A

Factory Method é um design pattern criacional que provê uma interfaca para criação de objetos em um superclasse, mas permite que subclasses alterem o tipo dos objetos que serão criados

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
2
Q

Estrutura

A

Produto
Produtos Concretos
Criador
Criadores Concretos

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
3
Q

Estrutura: Produto

A

declara a interface única para todos objetos que serão produzidos pelo Criados e suas subclasses

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
4
Q

Estrutura: Produtos Concretos

A

São as diferentes implementações da interface Produto.

Criadores Concretos irão criar e retornar essas classes

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
5
Q

Estrutura: Criador

A

declara o factory method que retorna os Produtos Concretos.

Esse método pode ser abstrato ou ter um comportamento padrão.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
6
Q

Estrutura: Criadores Concretos

A

Implementa ou sobreescreve o factory method base, por criar e retornar um dos produtos concretos.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
7
Q

Como pode ser útil quando:

Você não sabe os tipos exatos e dependencias dos objetos.

A

O Factory method pode esconder os detalhes de implementação de um produto para outro.
Para criar um novo tipo de produto você só precisa criar uma nova subclasse e sobreescrever o factory method nela.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
8
Q

Como pode ser útil quando:
Você quer fornecer aos usuários de sua biblioteca ou framework uma forma de alterar (por extensão) os componentes internos.

A

Um usuário pode facilmente sobreescrever um componente, mas como o framework reconheceria essa classe?
O factory method não fornece apenas um meio de extender os componentes, mas também reduzir o código que produz esses componentes para apenas um método.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
9
Q

Como pode ser útil quando:

Quando você quer economizar recurso computacional reutilizando objetos existentes ao invés de criar novos.

A

O processo de reutilização de objetos exige uma certa complexidade: criar um pool para os objetos existentes, verificar o pool, ver se o objeto já existe e decidir se deve ser criado um novo ou não.
Um factory method já deixa essa lógica implementada para todos os objetos que serão criados.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
10
Q

Como refatorar para Factory Method

A
  1. Extrair a interface comum para todos Produtos. Essa interface deve declarar métodos que fazem sentido para todos os produtos.
  2. Adicione um factory method vazio dentro da classe criadora. A sua assinatura deve retornar a interface extraida.
  3. Percorra todas as referências à criação de produtos troque as chamadas de criação.
    Você precisaria adicionar um parâmetro temporário que será usado para controlar quais produtos serão criados.
  4. Sobreescreva o factory method em subclasses e mova cada lógica de criação para a subclasse relativa.
  5. O parâmetro usado na classe de criação básica pode ser usado nas subclasses.
  6. Se o factory method ficar vazio, você pode declará-lo abstrato.
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
11
Q

Quando refatorar para FactoryMethod?

A

Quando a lógica de criação de objetos está muito acoplada em uma única classe.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
12
Q

Pros

A
  • Segue o Open/Closed Principle
  • Evita muito acoplamento entre os Produtos Concretos e as classes que os utilizam
  • Simplifica o código de criação para apenas um lugar
  • Simplifica a adição de novos produtos
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
13
Q

Cons

A

Requer subclasses extras.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly