Provém uma interface standard para percorrer uma coleção de itens.
Mediador
Usado para reduzir o acoplamento de classes que comunicam umas com as outras. Envia mensagens via um objeto mediador.
Memento
Usado para capturar o estado atual de um objeto e guardá-lo de maneira que possa ser restaurado sem quebrar as regras de encapsulamento.
Observer
Usado para habilitar mudanças no estado de um objeto. Outros objetos ficam “assinados” para serem notificados imediatamente de qualquer mudança ocorrida.
State
Usado para alterar o comportamento de um objeto e seus estados internos.
Strategy
Usado para realizar a “troca” de um algoritmo durante o runtime.
Template
Usado para implementar dois ou mais algoritmos. O template é definido e construído em algumas variações.
Visitor
Usado pra separar estruturas complexas de informações, da funcionalidade que pode ser usada na informação que ela possui.
— CREATIONAL —
Abstract Factory
Usado para prover ao cliente um grupo de objetos relacionados ou dependentes. Esse grupo é criado pela factory durante o tempo de execução.
Builder
Usado para criar objetos complexos que devem ser criados usando uma ordem ou algoritmo específico.
Factory Method
Usado para substituir construtores das classes, abstraindo o processo de geração de objetos, dessa forma, o tipo do objeto pode ser determinado em tempo de execução.
Prototype
Usado para instanciar um novo objeto através da cópia das propriedades de um objeto já existente, um clone independente.
Singleton
Usado para garantir que apenas um objeto de uma classe em particular seja criado. Todas as outras referências vão referenciar a mesma instância.
— STRUCTURAL —
###Adapter
Usado para prover um link entre dois tipos incompatíveis.
Bridge
Usado pora separar os elementos abstratos dos detalhes da implementação, provendo um meio de substituir os detalhes de implementação sem modificar a abstração.
Composite
Usado pra criar árvores hierárquicas de objetos relacionados, onde qualquer elemento da estrutura pode ser acessado e utilizado de uma maneira “padrão”.
Decorator
Usado para estender ou alterar a funcionalidade de um objeto em tempo de execução. Isso dá a oportunidade de alterar comportamento utilizando herança.
Façade
Usado para definir uma interface simplificada de um subsistema mais complexo.
Flyweight
Usado para minimizar o uso de memória ou recursos computacionais compartilhando o possível com outros objetos similares.
Protection Proxy
Usado para prover uma camada de segurança, onde esse objeto referencia um outro objeto mais “abaixo”, dessa forma restringindo o acesso.
Virtual Proxy
Usado da mesma forma que o Protection Proxy, mas para carregar objetos sob demanda.