Este documento descreve os principais padrões de projeto de software, incluindo padrões criacionais, estruturais e comportamentais. Os padrões criacionais abordados são Abstract Factory, Builder e Prototype. Os padrões estruturais incluem Adapter, Bridge e Composite. Os padrões comportamentais discutidos são Chain of Responsibility, Command e Observer.
1. QUICK REFERENCE
História: Criado na década de 70. Em 1987 surgiram os primeiros padrões de projetos.
Em 1995 ganhou popularidade com o livro do GoF.
Conceito: Um Pattern descreve uma solução comprovada para um problema
recorrente. Características: Encapsulamento, Generalidade, Equilíbrio, Abstração,
Abertura, Combinatoriedade. Além das características, deve ter um formato em 5 partes:
Nome, Exemplos, Contexto, Problema, Solução.
Padrões de Criação:
Abstract Factory: permite a criação de famílias de objetos relacionados ou
dependentes, através de uma única interface, sem que a classe concreta seja
especificada.
Builder: Define uma interface para criar um objeto, mas é a subclasse quem
decide qual objeto será instanciado.
Prototype: Específica o tipo de objeto a ser criado através de uma instância de
objeto protótipo.
Singleton: Este padrão garante a existência de apenas uma instância de uma
classe, mantendo um ponto global de acesso ao seu objeto.
Padrões Estruturais:
Adapter: adapta a interface de uma classe, para que ela possa interagir com
outras.
Bridge: Padrão que faz a interface variar independentemente das suas
implementações.
Composite: Possibilita enxergar um conjunto (composição) de objetos como se
fosse um só.
2. Decorator: Anexa responsabilidades adicionais a um objeto dinamicamente.
Façade: disponibiliza uma interface para uma grande quantidade de
funcionalidades de uma API.
Flyweight: define como compartilhar objetos para que os mesmos possam ser
usados em vários locais ao mesmo tempo, sendo assim, o padrão flyweight atua de forma
independente em cada local, similar a um pool.
Proxy: funciona de interface para outra classe.
Padrões Comportamentais:
Chain of Responsability: Representa o encadeamento de objetos
receptores para o processamento de uma série de solicitações diferentes.
Command: Encapsula uma solicitação como um objeto. Desta forma permite
que clientes realizem diferentes solicitações.
Interpreter: Um padrão interpreter define a linguagem, assim como
representações para gramáticas e abstrações para análises sintáticas.
Iterator: permite a iteração, e um modo de acesso a elementos de um
agregado de objetos, sequencialmente, sem exposição de estruturas internas.
Mediator: Define um objeto que encapsula as interações entre esse grupo.
Memento: armazena o estado interno de um objeto em um determinado
momento, para que seja possível retorná-lo a este estado, caso necessário.
Observer: Relação um para todos, dessa forma quando este um altera seu
status, todos atualizam automaticamente.
State: É usado para permitir que um objeto altere seu comportamento quando
um estado muda.
3. Strategy: Defini uma família de algoritmos e encapsula cada algoritmo como
uma classe, permitindo assim que elas possam ser trocados entre si. Este padrão
permite que o algoritmo possa variar independentemente dos clientes que o
utilizam.
Template Method: Define o esqueleto de um algoritmo numa operação,
passando alguns passos para as subclasses.
Visitor: adicionar novas funcionalidades a estruturas de um objeto pré-existente
sem a necessidade de modificá-las.