Os padrões estruturais GoF (Gang of Four) ocupam-se do modo como as classes e objetos formam estruturas grandes. Os padrões estruturais de classe usam a herança para compor as interfaces ou implementações. Por exemplo, a herança múltipla determina que uma classe única deve ser uma mistura de mais de uma classe pai. A herança múltipla facilita que as bibliotecas de classes desenvolvidas independentemente trabalhem juntas.
A tabela abaixo descreve cada um dos padrões estruturais GoF:
| Nome do padrão | Problema de design tratado | Função | Descrição |
|---|---|---|---|
| Adaptador | Converte a interface de uma classe em outra interface esperada pelos clientes. O adaptador elimina interfaces incompatíveis, possibilitando que as classes trabalhem juntas, o que não seria possível de outra forma. | Destino | Define o conjunto de operações usadas pelo cliente para abstrair uma determinada solicitação. |
| Cliente | Manipula os objetos Destino. | ||
| Adaptado | Fornece uma adaptação específica que pode ser usada em uma determinada solicitação. | ||
| Adaptador | Proporciona uma "cola" entre uma solicitação de destino específica e um Adaptado específico, que manipula atualmente a solicitação. | ||
| Ponte | Fornece um mecanismo abstrato que permite implementações específicas de um comportamento em particular para que possam variar. | Abstração | Define a interface abstrata que será implementada pela AbstraçãoRedefinida. |
| AbstraçãoRedefinida | Implementa as operações declaradas na interface da abstração. | ||
| Implementador | Define a interface abstrata que será implementada pelo ImplementadorConcreto. A abstração usa o Implementador. | ||
| ImplementadorConcreto | Implementa as operações declaradas na interface do implementador. | ||
| Composto | O composto permite que os clientes manipulem os objetos que podem conter outros objetos em um modo uniforme. | Componente | Define a interface fundamental que todos os objetos devem implementar para participar da composição. |
| Folha | Objeto que não contém outros objetos em relação à composição. | ||
| Composto | Objeto que contém outros objetos que se ajustam à interface do componente. | ||
| Cliente | Manipula o objeto Componente. | ||
| Decorador | Anexa dinamicamente responsabilidades adicionais a um objeto. Os decoradores estendem a funcionalidade proporcionando uma alternativa flexível para a formação de subclasses. | Componente | Define a interface abstrata que deve ser implementada por qualquer objeto que queira ser decorado dinamicamente. |
| ComponenteConcreto | Implementa as operações declaradas na interface do componente. | ||
| Decorador | Interface abstrata implementada pelo DecoradorConcreto. | ||
| DecoradorConcreto | Implementa as operações declaradas na interface do decorador. | ||
| Fachada | Fornece um ponto de entrada de nível superior a um subsistema potencialmente complexo, tornando, desta modo, tal subsistema mais gerenciável para o cliente. | Fachada | Objeto responsável pela delegação de solicitação. |
| Subsistema | Implementa solicitações específicas à medida que são delegadas pelo objeto Fachada. | ||
| Peso-mosca | O compartilhamento é usado para suportar grandes quantidades de objetos refinados eficientemente. | Peso-mosca | Define uma interface abstrata usada pelos clientes para manipular o estado que não pode ser compartilhado entre Peso-moscasConcretos. |
| Peso-moscaConcreto | Implementa a interface do peso-mosca, bem como proporciona um local de armazenamento para o estado que pode ser compartilhado. | ||
| Peso-moscaConcretoNãoCompartilhado | Implementa a interface do peso-mosca, bem como proporciona um local de armazenamento para o estado que não pode ser compartilhado. | ||
| FábricaDePeso-mosca | Fornece operações para a criação de objetos Peso-moscaConcreto. | ||
| Cliente | Manipula os vários objetos Peso-mosca. | ||
| Proxy | Um proxy ou espaço reservado é fornecido por outro objeto que controla o acesso a ele. | Proxy | Implementa a interface definida pelo sujeito que, por sua vez, passa todas as solicitações através de tal interface ao SujeitoReal. |
| Sujeito | Define o conjunto de operações que o SujeitoReal e o Proxy devem implementar. |