Motivos de cada padrão de projeto Flashcards
(22 cards)
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.
Separar a lógica da função principal de uma classe.
Mediator.
Se um objeto for alterado durante a execução, outros objetos têm que serem avisados e atualizados.
Observer.
A maioria dos métodos têm que selecionar (com muitos if’s ou um grande switch case) uma operação apropriada dependendo do estado atual do objeto, e depois podemos ter que adicionar mais estados e métodos baseados em estados da classe.
State.
Definir o esqueleto de um algoritmo usando operações abstratas e, assim, implementar partes invariantes de um algoritmo uma única vez.
Template Method.
Quer dar à um objeto a funcionalidade de voltar à um estado interno anterior. Ex: lista de pedidos de compras, implementar “undo” à um texto,
Memento.
Há uma loja virtual antiga e na hora de realizar um pedido o cálculo do frete está acoplado, então você tem por exemplo 3 transportadoras e código delas está todo junto. Uma alteração na chamada de alguma transportadora você pode acabar quebrando todo o componente de frete. A implementação é legada e provavelmente refatorar ele seja um trabalho longo e pode ser que você não tenha tempo para isso. O componente de Frete irá virar uma ponte de transferência de dados para o frete de cada transportadora.
Bridge.
A instância de um objeto é consideravelmente custosa para o servidor, pois temos pouco recurso de hardware, e você precisa instanciar-lo algumas vezes. São 5, 10 tipos de objetos que necessitam de instância e essa instância é dada seguindo uma condição. É preciso, basicamente, uma junção do padrão Singleton com o padrão Factory.
Flyweight.