-
Notifications
You must be signed in to change notification settings - Fork 0
/
notes.txt
82 lines (64 loc) · 5.85 KB
/
notes.txt
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
Book:
Design Patterns - Elements of Reusable Object-Oriented Software - 1994
Erich Gamma, Richard Helm, Ralph Johnson, John Vissides (Ganf of Four)
23 padrões de projeto
3 categorias:
* Criacionais: Cujo foco é na criação, construção de objetos
* Estruturais: Focados em composição e estruturais entre objetos
* COMPORTAMENTAIS: Focados nos métodos, estado e interação entr objetos
- Strategy
"Sugere que você pegue uma classe que faz algo específico de várias maneiras diferentes e
extraia todos esses algoritmos em classes separadas chamadas de estratégias ."
Para saber mais: https://refactoring.guru/design-patterns/strategy
https://refactoring.guru/design-patterns/strategy/java/example
- Chain of Responsability
"Depende da transformação de comportamentos específicos em objetos autônomos chamados de manipuladores.
O padrão sugere que você conecte esses manipuladores em uma cadeia. Cada manipulador vinculado tem um campo
para armazenar uma referência ao próximo manipulador na cadeia. Além de processar uma solicitação,
os manipuladores passam a solicitação mais adiante na cadeia. A solicitação viaja ao longo da cadeia até que
todos os manipuladores tenham a chance de processá-la."
Para saber mais: https://refactoring.guru/design-patterns/chain-of-responsibility
https://refactoring.guru/design-patterns/chain-of-responsibility/java/example
- Template Method
"Favorece o reaproveitamento de códigos comuns entre classes, evitando assim duplicações de códigos."
"Define o esqueleto de um algoritmo na superclasse, mas permite que as subclasses substituam etapas específicas
do algoritmo sem alterar sua estrutura."
"Sugere que você divida um algoritmo em uma série de etapas, transforme essas etapas em métodos e coloque
uma série de chamadas para esses métodos dentro de um único método de modelo. As etapas podem ser abstract ou
ter alguma implementação padrão. Para usar o algoritmo, o cliente deve fornecer sua própria subclasse,
implementar todas as etapas abstratas e substituir algumas das opcionais, se necessário (mas não o método do modelo em si)."
Para saber mais: https://refactoring.guru/design-patterns/template-method
https://refactoring.guru/design-patterns/template-method/java/example
- State
"A ideia principal é que, a qualquer momento, há um número finito de estados em que um programa pode estar.
Em qualquer estado único, o programa se comporta de maneira diferente e pode ser comutado de um estado para outro instantaneamente.
No entanto, dependendo do estado atual, o programa pode ou não mudar para outros estados.
Essas regras de comutação, chamadas de transições , também são finitas e predeterminadas."
"Este padrão, assim como o padrão Strategy, resolve o problema de muitos ifs no código."
"Essa estrutura pode ser semelhante ao padrão Strategy , mas há uma diferença fundamental.
No padrão State, os estados particulares podem estar cientes uns dos outros e iniciar transições de um estado para outro,
ao passo que as estratégias quase nunca se conhecem."
"Permite que um objeto altere seu comportamento quando seu estado interno muda."
"Sugere que você crie novas classes para todos os estados possíveis de um objeto e extraia todos os comportamentos específicos de estado para essas classes."
Para saber mais: https://refactoring.guru/design-patterns/state
https://refactoring.guru/design-patterns/state/java/example
- Command
"Transforma uma solicitação em um objeto independente que contém todas as informações sobre a solicitação.
Essa transformação permite transmitir solicitações como argumentos de método, atrasar ou enfileirar a execução
de uma solicitação e oferecer suporte a operações que podem ser desfeitas."
"Sugere que os objetos GUI não devem enviar essas solicitações diretamente.
Em vez disso, você deve extrair todos os detalhes da solicitação, como o objeto que está sendo chamado,
o nome do método e a lista de argumentos em uma classe de comando separada com um único método que aciona essa solicitação."]
"Use quando quiser parametrizar objetos com operações."
"Use quando quiser enfileirar operações, agendar sua execução ou executá-las remotamente."
"Use quando quiser implementar operações reversíveis."
"Um Command Handler tem como responsabilidade, normalmente, apenas orquestrar as tarefas a serem executadas,
ou seja, chamar as classes necessárias que realizam as tarefas desejadas"
Para saber mais: https://refactoring.guru/design-patterns/command
https://refactoring.guru/design-patterns/command/java/example
- Observer
"Permite definir um mecanismo de assinatura para notificar vários objetos sobre quaisquer eventos que ocorram com o objeto que eles estão observando"
"Use quando as mudanças no estado de um objeto exigirem a mudança de outros objetos e o conjunto real de objetos for desconhecido de antemão ou mudar dinamicamente."
"Use quando alguns objetos em seu aplicativo devem observar outros, mas apenas por um tempo limitado ou em casos específicos."
Para saber mais: https://refactoring.guru/design-patterns/observer
https://refactoring.guru/design-patterns/observer/java/example