FLYWEIGHT - “Usar compartilhamento para suportar eficientemente grandes quantidades de objetos de granularidade fina.” Utilizado quando uma instância de uma classe pode ser usada para fornecer muitas instâncias.
STATE: “Permite a um objeto alterar seu comportamento quando o seu estado interno muda. O objeto parecerá ter mudado sua classe.” Usar quando o comportamento de um objeto depende do seu estado, e ele deve mudar este comportamento em tempo de execução de acordo com este estado. Um conjunto de comportamentos encapsulados em objetos de estado a qualquer momento.
STRATEGY: “Definir uma família de algoritmos, encapsular cada uma delas e torná-las intercambiáveis. Strategy permite que o algoritmo varie independentemente dos clientes que o utilizam.” (comando condicional switch, desacoplar). Faz uso da composição. O cliente geralmente especifica o objeto de estratégia com o qual o contexto é composto.
VISITOR - “Representar uma operação a ser executada nos elementos de uma estrutura de objetos. Visitor permite definir uma nova operação sem mudar as classes dos elementos sobre os quais opera.”