I,Padrões estruturais
1,padrão Adapter
Usado para transformar uma interface em outra
java.util.Arrays#asList()
javax.swing.JTable(TableModel)
java.io.InputStreamReader(InputStream)
java.io.OutputStreamWriter(OutputStream)
javax.xml.bind.annotation.adapters.XmlAdapter#marshal()
javax.xml.bind.annotation.adapters.XmlAdapter#unmarshal()
2,Padrão Bridge
Esse padrão desacopla a abstração da implementação de suas operações, permitindo que abstração e implementação variem de forma independente
AWT (Fornece uma camada de abstração que mapeia o suporte a janelas para o sistema operacional nativo.)
JDBC
3,Padrão Composite
Faz com que, para o cliente, um objeto individual e uma composição de objetos sejam equivalentes. Em outras palavras, um método de determinado tipo também aceita esse mesmo tipo como parâmetro
javax.swing.JComponent#add(Component)
java.awt.Container#add(Component)
java.util.Map#putAll(Map)
java.util.List#addAll(Collection)
java.util.Set#addAll(Collection)
4,padrão Decorator
Adicionar dinamicamente funcionalidades extras a um objeto também é uma alternativa à criação de subclasses. Podemos observar que, ao criar uma instância de um tipo, também se passa um objeto desse mesmo tipo. Isso aparece por toda parte no JDK; você perceberá que está em todos os lugares, por isso a lista abaixo representa apenas uma pequena parte
java.io.BufferedInputStream(InputStream)
java.io.DataInputStream(InputStream)
java.io.BufferedOutputStream(OutputStream)
java.util.zip.ZipOutputStream(OutputStream)
java.util.Collections#checked<list |sortedmap |sortedset |set |map>
5,Padrão Fachada
Fornece uma interface simples para um conjunto de componentes, interfaces, abstrações ou subsistemas
java.lang.Class
javax.faces.webapp.FacesServlet
6,Padrão Flyweight
Usar cache para acelerar o acesso a uma grande quantidade de objetos pequenos
java.lang.Integer#valueOf(int)
java.lang.Boolean#valueOf(boolean)
java.lang.Byte#valueOf(byte)
java.lang.Character#valueOf(char)
7,padrão Proxy
O padrão Proxy usa um objeto simples para substituir um objeto complexo ou cuja criação é demorada.
java.lang.reflect.Proxy
RMI

Dois,padrões de criação
1,Padrão Abstract Factory
O padrão Abstract Factory fornece um protocolo para gerar uma série de objetos relacionados ou independentes, sem especificar seus tipos concretos. Ele permite desacoplar a aplicação da implementação concreta do framework utilizado. Isso é encontrado por toda parte no JDK e em muitos frameworks, como o Spring. Também é fácil identificá-lo: um método que cria um novo objeto, mas retorna uma interface ou classe abstrata, corresponde ao padrão Abstract Factory
java.util.Calendar#getInstance()
java.util.Arrays#asList()
java.util.ResourceBundle#getBundle()
java.sql.DriverManager#getConnection()
java.sql.Connection#createStatement()
java.sql.Statement#executeQuery()
java.text.NumberFormat#getInstance()
javax.xml.transform.TransformerFactory#newInstance()
2,Padrão de projeto Builder
Define uma nova classe para construir instâncias de outra classe, simplificando a criação de objetos complexos. O padrão Builder também costuma usar encadeamento de métodos para implementar
java.lang.StringBuilder#append()
java.lang.StringBuffer#append()
java.sql.PreparedStatement
javax.swing.GroupLayout.Group#addComponent()
3,método de fábrica
É simplesmente um método que retorna um objeto concreto
java.lang.Proxy#newProxyInstance()
java.lang.Object#toString()
java.lang.Class#newInstance()
java.lang.reflect.Array#newInstance()
java.lang.reflect.Constructor#newInstance()
java.lang.Boolean#valueOf(String)
java.lang.Class#forName()
4,padrão Protótipo
Permite que as instâncias de uma classe gerem cópias de si mesmas. Quando criar uma instância de um objeto é muito complexo e demorado, você pode usar esse padrão para copiar um objeto e modificá-lo diretamente, em vez de criar uma nova instância
java.lang.Object#clone()
java.lang.Cloneable
5,padrão Singleton
Serve para garantir que uma classe tenha apenas uma instância. Joshua Bloch recomenda em Effetive Java outra maneira: usar uma enumeração
java.lang.Runtime#getRuntime()
java.awt.Toolkit#getDefaultToolkit()
java.awt.GraphicsEnvironment#getLocalGraphicsEnvironment()
java.awt.Desktop#getDesktop()
Três, padrões comportamentais
1,padrão Cadeia de Responsabilidade
Desacopla os objetos ao passar uma solicitação de um objeto para o próximo na cadeia, até que ela seja totalmente processada
java.util.logging.Logger#log()
javax.servlet.Filter#doFilter()
2, modo de comando
Encapsular operações em objetos para permitir seu armazenamento, passagem e retorno
java.lang.Runnable
javax.swing.Action
3,padrão Interpretador
Esse padrão geralmente define a gramática de uma linguagem e depois interpreta as instruções dessa gramática
java.util.Pattern
java.text.Normalizer
java.text.Format
4,padrão Iterator
Fornece uma maneira uniforme de acessar sequencialmente os objetos de uma coleção, independentemente da implementação específica da coleção subjacente
java.util.Iterator
java.util.Enumeration
5,padrão Mediator
Usar um objeto intermediário para distribuir mensagens e reduzir as dependências diretas entre classes
java.util.Timer
java.util.concurrent.Executor#execute()
java.util.concurrent.ExecutorService#submit()
java.lang.reflect.Method#invoke()
6,padrão Memento
Gera um instantâneo do estado de um objeto para que ele possa retornar ao estado original sem expor seu conteúdo interno. O objeto Date implementa o padrão Memento por meio de um valor long interno
java.util.Date
java.io.Serializable
7,padrão Objeto Nulo
Esse padrão substitui o estado de ausência de objeto por um objeto sem significado. Isso evita que você precise tratar separadamente o objeto nulo
java.util.Collections#emptyList()
java.util.Collections#emptyMap()
java.util.Collections#emptySet()
8,padrão Observer
Isso permite que um objeto envie mensagens de forma flexível aos objetos interessados
java.util.EventListener
javax.servlet.http.HttpSessionBindingListener
javax.servlet.http.HttpSessionAttributeListener
javax.faces.event.PhaseListener
9, padrão State
Ao alterar o estado interno do objeto, permite que você modifique dinamicamente seu comportamento durante a execução
java.util.Iterator
javax.faces.lifecycle.LifeCycle#execute()
10,Padrão Strategy
Use esse padrão para encapsular um conjunto de algoritmos em uma série de objetos. Ao passar esses objetos, é possível alterar com flexibilidade as funcionalidades do programa
java.util.Comparator#compare()
javax.servlet.http.HttpServlet
javax.servlet.Filter#doFilter()
11,padrão Método Template
Permite que as subclasses sobrescrevam parte de um método, em vez de sobrescrevê-lo por inteiro; você pode controlar quais operações as subclasses precisam sobrescrever
java.util.Collections#sort()
java.io.InputStream#skip()
java.io.InputStream#read()
java.util.AbstractList#indexOf()
12,padrão Visitor
Oferece uma maneira prática e fácil de manter para operar sobre um conjunto de objetos. Permite modificar ou ampliar o comportamento dos objetos sem alterar os objetos sobre os quais se opera
javax.lang.model.element.Element e javax.lang.model.element.ElementVisitor
javax.lang.model.type.TypeMirror e javax.lang.model.type.TypeVisitor
Nota do tradutor:muitos pontos podem ser controversos. Se algo é ou não um determinado padrão não é particularmente importante; o importante é que seu projeto pode oferecer aprendizados para melhorar nosso código