Privilegia principalmente a reutilização
Padrão de projeto é uma solução padronizada para um problema que se repete muitas vezes dentro de um determinado contexto.
Padrões de criação
Diz respeito a padronizar a forma como os objetos são criados, compostos e representados.
Abstract Factory
Prover uma interface para criação de famílias de objetos relacionados ou independentes sem que se especifiquem suas classes concretas.
Factory Method
São métodos que retornam um novo objeto
Singleton
Obter somente uma instância de um objeto na aplicação.
Prototype
Quero que, dados dois objetos, eles sejam idênticos, mas não sejam a mesma instância.a1 = a2 não funciona porque eles viram a mesma instância.O Java já possui o método clone() que faz isso.
Padrões Estruturais
Estão relacionados a como classes e objetos são compostos de forma a gerar estruturas maiores e mais complexas.
Adapter
Com o adapter é possível por exemplo, trocar de uma biblioteca gráfica por outra sem grande impacto na aplicação.Definir uma interface que a aplicação (cliente) vai usar, implementar essa interface e dentro da implementação chamar os métodos da biblioteca gráfica. Ex. adaptada.desenharBotao();
Flyweight
Dado um conjunto de pequenos objetos que possuem um atributo em comum, se cria apenas um objeto e todos os pequenos objetos apontam para o mesmo, economizando espaço em memória.
Proxy
Proxy representa uma visão diferente do objeto em questão. Por exemplo, um objeto representa uma imagem de satélite com alta resolução, cria-se o proxy desse objeto com a imagem de baixa resolução e posso manipular os dois da mesma forma, só que um é mais leve.
Façade
Dado que a aplicação precisa chamar a mesma sequencia de métodos em diversos locais diferentes, cria-se um Façade que faz essas chamas para aplicação e a aplicação só chama o Façade.
Composite
Representa estrutura de árvore. Um objeto pode ter nós que são da mesma interface Composite ou então ser uma folha.
Padrões Comportamentais
Estão relacionados ao comportamento dos objetos
Chain of Responsability
Uma vez que existe uma cadeia de objetos, e é necessário ser enviado uma mensagem para um desses objetos. Esses objetos vão encaminhando para o próximo objeto da sequência até que um objeto identifique que a mensagem é pra ele. É uma lista encadeada.