Design patterns adaptados e idiomáticos para Rust. Cada padrão inclui motivação, implementação completa, análise de trade-offs e exemplos do mundo real.
Padrões Criacionais
Padrões para criação de objetos de forma flexível e reutilizável.
Builder
Construção passo a passo de objetos complexos. O padrão mais usado em APIs Rust.
Factory Method
Criação de objetos via trait objects e enums. Polimorfismo em Rust.
Singleton
Estado global seguro com OnceCell, LazyLock e static. Thread-safe por padrão.
Prototype (Clone)
Clonagem de objetos com a trait Clone. Deep copy vs shallow copy em Rust.
Padrões Estruturais
Padrões para composição de estruturas maiores a partir de partes menores.
Adapter
Adaptação de interfaces incompatíveis com traits e wrappers (newtype pattern).
Decorator
Extensão de funcionalidade com composição. Middleware, logging e caching em Rust.
Facade
Interface simplificada para subsistemas complexos. APIs limpas e módulos públicos.
Composite
Estruturas hierárquicas com enums recursivos e Box. Árvores de UI, ASTs e file systems.
Padrões Comportamentais
Padrões para comunicação e responsabilidade entre objetos.
Strategy
Algoritmos intercambiáveis via trait objects, closures ou enums. Flexibilidade máxima.
Observer
Pub/sub e eventos com callbacks, channels e async streams em Rust.
Command
Encapsulamento de ações como objetos. Undo/redo, macros e task queues.
Iterator
Iteração lazy e composável. O padrão mais poderoso e idiomático do Rust.
State
Máquinas de estado com enums e tipos. Type-state pattern para segurança em compilação.
Padrões Idiomáticos Rust
Padrões específicos do ecossistema Rust, sem equivalente direto em GoF.
Newtype
Wrapper de tipo para segurança semântica. Evita confundir metros com quilômetros.
Type-State
Máquinas de estado em tempo de compilação. Estados inválidos são impossíveis.
RAII e Drop
Gerenciamento automático de recursos. Arquivos, locks, conexões — tudo seguro.
Error Handling Idiomático
Result, Option, thiserror e anyhow. O sistema de erros mais robusto que existe.
Command Pattern em Rust: Encapsulando Ações com Enums e Trait Objects
O Command Pattern (Padrão de Comando) é um dos padrões comportamentais mais versáteis do catálogo GoF. Ele encapsula uma solicitação como um objeto, permitindo …
Iterator Pattern em Rust: Iteração Lazy, Composável e Idiomática
O Iterator Pattern (Padrão de Iterador) permite percorrer elementos de uma coleção sem expor sua representação interna. Em Rust, este padrão não é apenas um …
State Pattern em Rust: Máquinas de Estado com Enums e Tipos
O State Pattern (Padrão de Estado) permite que um objeto altere seu comportamento quando seu estado interno muda, como se o objeto trocasse de classe. Em Rust, …
Visitor Pattern em Rust: Percorrendo Estruturas com Duplo Despacho
O Visitor Pattern (Padrão Visitante) permite adicionar novas operações a uma estrutura de objetos sem modificar as classes (ou, em Rust, os tipos) que compõem …
Chain of Responsibility em Rust: Cadeias de Handlers e Middleware
O Chain of Responsibility (Cadeia de Responsabilidade) é um padrão comportamental que permite passar uma solicitação por uma cadeia de handlers. Cada handler …
Template Method em Rust: Traits com Métodos Default como Templates
O Template Method (Método Template) é um padrão comportamental que define o esqueleto de um algoritmo em uma operação, delegando alguns passos para subclasses. …
Newtype Pattern em Rust: Segurança de Tipos com Custo Zero
O Newtype Pattern é um dos padrões mais idiomáticos e poderosos do Rust. Ele consiste em envolver um tipo existente em uma tuple struct de um único campo, …
Type-State Pattern em Rust: Estados em Tempo de Compilação
O Type-State Pattern é um padrão idiomático do Rust que codifica estados como parâmetros de tipo genéricos, de modo que transições inválidas se tornam erros de …
RAII e Drop Pattern em Rust: Gerenciamento Automático de Recursos
RAII (Resource Acquisition Is Initialization) é um dos padrões mais fundamentais em Rust — e diferente de C++, onde nasceu, em Rust ele é garantido pelo …
Error Handling Idiomático em Rust: Result, Option, thiserror e anyhow
O tratamento de erros em Rust é radicalmente diferente de outras linguagens. Não há exceções (exceptions), não há try/catch, não há null. Em vez disso, Rust usa …