Skip to content
Back to skills

Dp Behavioral Patterns

ASecurity

Especialista em Padrões de Projeto Comportamentais (GoF Behavioral Patterns) baseado em Design Patterns (Gang of Four) e Refactoring to Patterns. Cobre Chain of Responsibility, Command, Iterator, Mediator, Memento, Observer, State, Strategy, Template Method e Visitor, organizando algoritmos, fluxos de controle e delegação de responsabilidades entre objetos.

  • 10 stars
  • 0 votes
  • 0 copies
  • 2 views
  • Added September 8, 2026
designgorefactoring

Works with

  • cursor

Security analysis

A100/100

Scanned September 8, 2026

npx -y skills add dandgabr/skills --skill dp-behavioral-patterns --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of Dp Behavioral Patterns?

Add the live security badge to your README. It updates with every re-scan.

Security grade badge for Dp Behavioral Patterns
[![Security: A — Skills Directory](https://www.skillsdirectory.com/api/skills/dandgabr-dp-behavioral-patterns/badge)](https://www.skillsdirectory.com/skills/dandgabr-dp-behavioral-patterns)

More formats (shields.io, HTML) on the badges page. Keep it an A: scan every change in CI with Pro.

Download with Pro
SKILL.md
---
name: dp-behavioral-patterns
description: "Especialista em Padrões de Projeto Comportamentais (GoF Behavioral Patterns) baseado em Design Patterns (Gang of Four) e Refactoring to Patterns. Cobre Chain of Responsibility, Command, Iterator, Mediator, Memento, Observer, State, Strategy, Template Method e Visitor, organizando algoritmos, fluxos de controle e delegação de responsabilidades entre objetos."
---

# Padrões de Projeto Comportamentais (GoF Behavioral Patterns)

Os padrões comportamentais cuidam de algoritmos e da atribuição de responsabilidades entre objetos. Eles não descrevem apenas padrões de objetos ou classes, mas também os padrões de comunicação entre eles, desacoplando o emissor de uma solicitação de seu receptor.

---

## ⛓️ 1. Chain of Responsibility (Cadeia de Responsabilidade)
Permite passar pedidos por uma corrente de manipuladores. Ao receber um pedido, cada manipulador decide se processa o pedido ou o passa para o próximo manipulador na cadeia (ex: pipelines de middlewares HTTP, filtros de autenticação).

```mermaid
classDiagram
    class Handler {
        <<interface>>
        +setNext(h: Handler) Handler
        +handle(request)
    }
    class BaseHandler {
        -next: Handler
        +setNext(h: Handler) Handler
        +handle(request)
    }
    class AuthHandler {
        +handle(request)
    }
    class RateLimitHandler {
        +handle(request)
    }
    Handler <|.. BaseHandler
    BaseHandler <|-- AuthHandler
    BaseHandler <|-- RateLimitHandler
```

---

## 🕹️ 2. Command (Comando)
Transforma um pedido em um objeto independente que contém todas as informações sobre a solicitação. Essa transformação permite parametrizar métodos com diferentes pedidos, enfileirar operações, registrar histórico e suportar operações de desfazer/refazer (*Undo/Redo*).

```mermaid
classDiagram
    class Command {
        <<interface>>
        +execute()
        +undo()
    }
    class ConcreteCommand {
        -receiver: Receiver
        -params
        +execute()
        +undo()
    }
    class Invoker {
        -command: Command
        +setCommand(c: Command)
        +executeCommand()
    }
    class Receiver {
        +action()
    }
    Command <|.. ConcreteCommand
    Invoker o-- Command
    ConcreteCommand o-- Receiver
```

---

## 🔁 3. Iterator (Iterador)
Permite percorrer elementos de uma coleção agregada (lista, árvore, grafo) sem expor sua representação subjacente ou estrutura de dados interna.

```mermaid
classDiagram
    class Iterator {
        <<interface>>
        +hasNext() bool
        +next() Object
    }
    class Aggregate {
        <<interface>>
        +createIterator() Iterator
    }
    class ConcreteIterator {
        -collection
        -cursor
        +hasNext() bool
        +next() Object
    }
    Iterator <|.. ConcreteIterator
```

---

## 🎛️ 4. Mediator (Mediador)
Reduz as dependências caóticas entre objetos comunicantes. O padrão restringe comunicações diretas entre os objetos e os força a colaborar apenas através de um objeto mediador central (ex: componentes de formulário de UI, event broker em microsserviços).

```mermaid
classDiagram
    class Mediator {
        <<interface>>
        +notify(sender, event)
    }
    class DialogMediator {
        -button: Button
        -textBox: TextBox
        +notify(sender, event)
    }
    class Component {
        -mediator: Mediator
        +setMediator(m: Mediator)
    }
    Mediator <|.. DialogMediator
    Component <|-- Button
    Component <|-- TextBox
    DialogMediator o-- Button
    DialogMediator o-- TextBox
```

---

## 💾 5. Memento (Lembrança / Snapshot)
Permite capturar e salvar o estado interno de um objeto sem violar o encapsulamento, de modo que o objeto possa ser restaurado para esse estado posteriormente.

```mermaid
classDiagram
    class Originator {
        -state
        +save(): Memento
        +restore(m: Memento)
    }
    class Memento {
        -state
        +getState()
    }
    class Caretaker {
        -history: List~Memento~
        +backup()
        +undo()
    }
    Originator ..> Memento : gera/restaura
    Caretaker o-- Memento : armazena
```

---

## 📡 6. Observer (Observador / Pub-Sub)
Define um mecanismo de assinatura para notificar múltiplos objetos observadores sobre quaisquer eventos ou mudanças de estado que aconteçam no objeto sujeito que eles estão observando.

```mermaid
classDiagram
    class Subject {
        -observers: List~Observer~
        +subscribe(o: Observer)
        +unsubscribe(o: Observer)
        +notify()
    }
    class Observer {
        <<interface>>
        +update(context)
    }
    class ConcreteObserverA {
        +update(context)
    }
    Subject o-- Observer
    Observer <|.. ConcreteObserverA
```

---

## 🔄 7. State (Estado)
Permite que um objeto altere seu comportamento quando seu estado interno muda. O objeto parecerá ter mudado de classe, substituindo condicionais gigantescas (`if/switch`) por classes de estado polimórficas.

```mermaid
classDiagram
    class Context {
        -state: State
        +changeState(s: State)
        +request()
    }
    class State {
        <<interface>>
        +handle(ctx: Context)
    }
    class DraftState {
        +handle(ctx: Context)
    }
    class PublishedState {
        +handle(ctx: Context)
    }
    Context o-- State
    State <|.. DraftState
    State <|.. PublishedState
```

---

## 🎯 8. Strategy (Estratégia)
Define uma família de algoritmos intercambiáveis, encapsula cada um deles em uma classe separada e torna os objetos intercambiáveis em tempo de execução (ex: diferentes formas de pagamento, estratégias de compressão ou algoritmos de roteamento).

```mermaid
classDiagram
    class Context {
        -strategy: Strategy
        +setStrategy(s: Strategy)
        +executeStrategy()
    }
    class Strategy {
        <<interface>>
        +execute(data)
    }
    class ConcreteStrategyA {
        +execute(data)
    }
    class ConcreteStrategyB {
        +execute(data)
    }
    Context o-- Strategy
    Strategy <|.. ConcreteStrategyA
    Strategy <|.. ConcreteStrategyB
```

---

## 📐 9. Template Method (Método Padrão)
Define o esqueleto de um algoritmo na superclasse, mas deixa as subclasses sobrescreverem etapas específicas do algoritmo sem modificar a sua estrutura geral (Inversão de Controle / Princípio de Hollywood: *"Don't call us, we'll call you"*).

```mermaid
classDiagram
    class AbstractClass {
        +templateMethod()
        #step1()*
        #step2()
        #step3()*
    }
    class ConcreteClassA {
        #step1()
        #step3()
    }
    class ConcreteClassB {
        #step1()
        #step3()
    }
    AbstractClass <|-- ConcreteClassA
    AbstractClass <|-- ConcreteClassB
```

---

## 🚶 10. Visitor (Visitante)
Permite separar algoritmos dos objetos nos quais eles operam (Double Dispatch), permitindo adicionar novas operações a estruturas de objetos complexas (como árvores sintáticas AST) sem modificar as classes desses objetos.

```mermaid
classDiagram
    class Element {
        <<interface>>
        +accept(v: Visitor)
    }
    class ConcreteElementA {
        +accept(v: Visitor)
    }
    class Visitor {
        <<interface>>
        +visitElementA(e: ConcreteElementA)
        +visitElementB(e: ConcreteElementB)
    }
    class ConcreteVisitor {
        +visitElementA(e: ConcreteElementA)
        +visitElementB(e: ConcreteElementB)
    }
    Element <|.. ConcreteElementA
    Visitor <|.. ConcreteVisitor
    ConcreteElementA ..> Visitor : e.accept(v) -> v.visitElementA(this)
```

---

## ⚖️ Matriz Comparativa dos Padrões Comportamentais

| Padrão | Foco Principal | Mecanismo |
| :--- | :--- | :--- |
| **Chain of Responsibility** | Processamento sequencial de requisição | Passagem de ponteiro recursivo ao próximo manipulador |
| **Command** | Encapsulamento de requisição como objeto | Objeto com método `execute()` e `undo()` |
| **Iterator** | Varredura sequencial de coleções | Objeto cursor com `hasNext()` e `next()` |
| **Mediator** | Centralização de comunicação many-to-many | Hub mediador desacoplando nós comunicantes |
| **Memento** | Restauração de snapshots de estado | Objeto de estado opaco para o Caretaker |
| **Observer** | Notificação de eventos 1-para-N | Lista de inscritos com método `update()` |
| **State** | Variação de comportamento por estado da máquina | Delegação para objeto de estado ativo |
| **Strategy** | Algoritmos alternativos intercambiáveis | Composição de interface de estratégia |
| **Template Method** | Esqueleto de algoritmo invariante | Herança com métodos abstratos/ganchos |
| **Visitor** | Novas operações sobre estruturas compostas | Double dispatch `accept(visitor)` |

Attribution

Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.

Comments

Loading comments…

Newsletter

Get the weekly list of safe new skills, and the ones we pulled.