Os padrões comportamentais GoF (Gang of Four) tratam dos algoritmos de objetos e da atribuição de responsabilidades entre os objetos. Estes padrões também se destinam à comunicação entre estes objetos e representam a interconexão entre tais objetos. Esta interconexão pode incluir herança e a realização de tarefas.
A tabela abaixo descreve cada um dos padrões comportamentais GoF:
| Nome do padrão | Problema de design tratado | Função | Descrição |
|---|---|---|---|
| Cadeia de responsabilidades | Ao dar a mais de um objeto a possibilidade de manipular uma solicitação, você pode impedir a união do remetente de tal solicitação ao seu destinatário. Os objetos de recebimento estão encadeados e a solicitação é passada pela cadeia até que um objeto a manipule. | Manipulador | Define uma interface abstrata usada para solicitações específicas. |
| ManipuladorConcreto | Implementa as operações declaradas na interface do manipulador. | ||
| Cliente | Inicia a comunicação através de um manipulador concreto. | ||
| Padrão de comando | É possível parametrizar os clientes com diferentes solicitações encapsulando uma solicitação como um objeto. Também é possível registrar ou colocar em fila as solicitações e suportar operações que não podem ser desfeitas. | Comando | Define uma interface abstrata para execução de operações. |
| ComandoConcreto | Implementa as operações declaradas na interface do comando. | ||
| Cliente | Cria um objeto ComandoConcreto. | ||
| Chamador | Executa a interface definida no objeto derivado do Comando. | ||
| Receber | Realiza a implementação concreta da operação solicitada. | ||
| Intérprete | Define uma representação da gramática de um dado idioma. Um intérprete usa a representação para interpretar frases do idioma. | ExpressãoAbstrata | Define uma operação de interpretação abstrata que deve ser implementada por todos os nós na árvore de sintaxe abstrata. |
| ExpressãoTerminal | Proporciona uma implementação concreta da operação de interpretação associada especificamente a símbolos terminais na gramática. | ||
| ExpressãoNãoTerminal | Proporciona uma implementação concreta da operação de interpretação associada especificamente a símbolos não terminais na gramática. | ||
| Repetidor | Proporciona um mecanismo uniforme para a navegação de elementos diferentes em um conjunto sem expor detalhes de implementação específicos do elemento no qual se está navegando. | Repetidor | Define uma interface abstrata usada para navegar elementos. |
| RepetidorConcreto | Implementa as operações declaradas na interface do repetidor. | ||
| Agrupamento | Define uma interface abstrata usada para criar um objeto RepetidorConcreto. | ||
| AgrupamentoConcreto | Implementa as operações declaradas na interface do agrupamento. | ||
| Mediador | Proporciona um mecanismo uniforme para a navegação de elementos diferentes em um conjunto sem expor detalhes de implementação específicos do elemento no qual se está navegando. | Repetidor | Define uma interface abstrata usada para navegar elementos. |
| Repetidor concreto | Implementa as operações declaradas na interface do repetidor. | ||
| Agrupamento | Define uma interface abstrata usada para criar um objeto RepetidorConcreto. | ||
| Agrupamento concreto | Implementa as operações declaradas na interface do agrupamento. | ||
| Memento | O estado interno do objeto pode ser capturado e exteriorizado para que, mais tarde, o objeto possa ser restaurado para este estado. Este processo é feito sem violar a encapsulamento. | Memento | Objeto que gerencia o estado do Originador em um dado momento no tempo. |
| Originador | Cria um objeto Memento, proporcionando a este objeto as informações de estado necessárias no contexto atual. | ||
| Zelador | Agrupa objetos Memento. | ||
| Observador | Uma dependência um-por-vários é definida entre objetos. Quando um objeto muda de estado, todos os seus dependentes são automaticamente notificados e atualizados. | Sujeito | Define uma interface abstrata usada para anexar vários observadores a este sujeito. |
| Observador | Define uma interface abstrata usada quando o sujeito que está sendo observado está sendo atualizado. | ||
| SujeitoConcreto | Implementa as operações declaradas na interface do sujeito. | ||
| ObservadorConcreto | Implementa as operações declaradas na interface do observador. | ||
| Estado | Proporciona um mecanismo que permite que um objeto altere seu comportamento quando ocorrerem alterações do estado interno. | Contexto | Define a interface usada pelos clientes para ter acesso ao estado do contexto. |
| Estado | Define uma interface abstrata que deve ser implementada pelo EstadoConcreto. A interface é específica do domínio. | ||
| EstadoConcreto | Implementa as operações declaradas na interface do estado. | ||
| Estratégia | Uma família de algoritmos está definida, cada uma está encapsulada e pode ser permutável. O algoritmo pode variar independentemente dos clientes que o utiliza. | Estratégia | Define uma interface abstrata implementada por objetos EstratégiaConcreta. |
| EstratégiaConcreta | Implementa as operações declaradas na interface da estratégia. | ||
| Contexto | Agrega objetos que implementam a interface da estratégia. | ||
| MétodoModelo | A estrutura de um algoritmo é definida em uma operação e algumas etapas estão submetidas às subclasses. Sem alterar a estrutura do algoritmo, as subclasses podem redefinir certas etapas de um algoritmo. | ClasseAbstrata | Define as várias operações que podem ser anuladas pela ClasseConcreta. |
| ClasseConcreta | Implementa as operações específicas definidas na ClasseAbstrata. | ||
| Visitante | O visitante representa uma operação que deve ser realizada sobre os elementos de uma estrutura de objetos. É possível definir uma nova operação sem alterar as classes dos elementos nos quais opera. | Visitante | Fornece operações específicas a elementos concretos que permitem que este objeto Visitante os visite. |
| VisitanteConcreto | Implementa as operações declaradas na interface do visitante. | ||
| Elemento | Declara uma operação Aceitar que permite aos objetos Visitantes processar o elemento atual. | ||
| ElementoConcreto | Implementa as operações declaradas na interface do elemento. | ||
| EstruturaDeObjetos | Gerencia a colaboração entre os objetos VisitanteConcreto e ElementoConcreto. |