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.
Builder Pattern em Rust
Introdução
O Builder Pattern (padrão construtor) é provavelmente o padrão de projeto mais utilizado em Rust. Enquanto em linguagens como Java e C# ele é apenas …
Leia maisFactory Method em Rust
Introducao
O Factory Method (Metodo Fabrica) e um padrao criacional que define uma interface para criar objetos, mas permite que as subclasses (ou, em Rust, os …
Leia maisSingleton em Rust
Introducao
O Singleton garante que uma classe (ou, em Rust, um tipo) tenha apenas uma instancia durante toda a vida do programa, fornecendo um ponto de acesso …
Leia maisPrototype (Clone) em Rust
Introducao
O Prototype (Prototipo) e um padrao criacional que permite criar novos objetos clonando uma instancia existente, em vez de construi-los do zero. Em …
Leia maisAdapter em Rust
Introducao
O Adapter (Adaptador) e um padrao estrutural que permite que interfaces incompativeis trabalhem juntas. Ele atua como um “tradutor” entre …
Leia maisDecorator em Rust
Introducao
O Decorator (Decorador) e um padrao estrutural que permite adicionar funcionalidades a um objeto sem alterar sua interface original. Em vez de usar …
Leia maisFacade em Rust
Introducao
O Facade (Fachada) e um padrao estrutural que fornece uma interface simplificada para um subsistema complexo. Em vez de expor dezenas de classes e …
Leia maisComposite em Rust
Introducao
O Composite (Composto) e um padrao estrutural que permite tratar objetos individuais e composicoes de objetos de maneira uniforme. Ele organiza …
Leia maisStrategy em Rust
Introducao
O Strategy (Estrategia) e um padrao comportamental que permite definir uma familia de algoritmos, encapsular cada um deles e torna-los …
Leia maisObserver em Rust
Introducao
O Observer (Observador) e um padrao comportamental que define uma dependencia um-para-muitos entre objetos: quando um objeto (o sujeito) muda de …
Leia maisCommand 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 …
Leia maisIterator 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 …
Leia maisState 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, …
Leia maisVisitor 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 …
Leia maisChain 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 …
Leia maisTemplate 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. …
Leia maisNewtype 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, …
Leia maisType-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 …
Leia maisRAII 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 …
Leia maisError 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 …