Motivos de cada padrão de projeto Flashcards
Criar classes que têm métodos em comum.
Factory Method.
Criar objetos que se enquadram em tipos e categorias.
Abstract Factory ou Prototype.
Criação de objetos com vários parâmetros opcionais.
Builder.
Criação de objetos cujo estado inicial não costumar variar muito.
Prototype.
Ajustar uma classe incompatível. Ex: tem uma biblioteca nova e o seu programa n aceita ela pois é pra uma versão mais antiga.
Adapter.
A estrutura de um objeto pode se tornar parecida com uma árvore pra baixo e você precisa rodar um comportamento recursivamente sobre todos os componentes de uma árvore de objetos.
Composite.
Não produzir inúmeras subclasses para suportar cada combinação. Dar funcionalidades apenas a um objeto específico, e não a todos (aí seria herança) e em tempo de execução. Também pode remover ela.
Decorator.
Executar operação parecida pra objetos com valores de atributos diferentes.
Strategy.
Tem objetos de determinadas classes de interfaces diferentes e se quer executar diferentes operações nelas, e a adição de novas operações é frequente.
Visitor.
A operação certa é decidida só vendo o resultado.
Chain of responsibility.
Tem que minimizar a comunicação com uma parte do código cuja lógica é difícil entender e, consequentemente, seria difícil usar seus recursos diretamente.
Facade.
Existe muitas dependências entre os clientes e as classes de implementação de uma abstração;
Facade.
Tem que redirecionar o acesso aos objetos pra, antes, verificar algo: autorização de acesso, tentar uma operação (método) alternativo que pode ser melhor, etc.
Proxy.
Um método repetido em classes cuja única semelhança é essa e algumas dessas classes já fazem herança, e não pode haver herança múltipla.
Command.
Precisa manipular os dados de uma lista, fila ou pilha em mais de um ponto no código ou, pior ainda, também precisa realizar algum filtro rápido ou alguma manipulação complexa.
Iterator.