Guia completo dos principais design patterns com implementações práticas em TypeScript
Padrões validados por milhares de desenvolvedores ao longo de décadas.
Linguagem comum entre desenvolvedores para discutir arquitetura.
Estruturas que facilitam manutenção e evolução do software.
Reutilização de soluções conhecidas acelera o desenvolvimento.
Padrões que lidam com mecanismos de criação de objetos
Garante que uma classe tenha apenas uma instância e fornece acesso global a ela.
Cria objetos sem especificar suas classes exatas, delegando para subclasses.
Constrói objetos complexos passo a passo, permitindo diferentes representações.
Padrões que lidam com composição de classes e objetos
Permite que interfaces incompatíveis trabalhem juntas.
Adiciona comportamentos a objetos dinamicamente sem alterar sua estrutura.
Fornece interface simplificada para um subsistema complexo.
Padrões que focam na comunicação entre objetos e distribuição de responsabilidades
Define dependência um-para-muitos entre objetos para notificação automática.
Define família de algoritmos e os torna intercambiáveis.
Encapsula requisições como objetos, permitindo parametrização e filas.
Veja como implementar os padrões mais importantes em TypeScript
class DatabaseConnection {
private static instance: DatabaseConnection;
private constructor() {}
static getInstance(): DatabaseConnection {
if (!DatabaseConnection.instance) {
DatabaseConnection.instance = new DatabaseConnection();
}
return DatabaseConnection.instance;
}
connect(): void {
console.log('Conectando ao banco...');
}
}
// Uso
const db1 = DatabaseConnection.getInstance();
const db2 = DatabaseConnection.getInstance();
console.log(db1 === db2); // true
Perfeito para conexões de banco, loggers, caches e configurações globais.
interface Observer {
update(data: any): void;
}
class Subject {
private observers: Observer[] = [];
subscribe(observer: Observer): void {
this.observers.push(observer);
}
notify(data: any): void {
this.observers.forEach(observer => observer.update(data));
}
}
class EmailNotifier implements Observer {
update(data: any): void {
console.log('Email enviado:', data);
}
}
// Uso
const subject = new Subject();
const emailNotifier = new EmailNotifier();
subject.subscribe(emailNotifier);
subject.notify('Novo usuário cadastrado');
Ideal para sistemas de notificação, eventos e atualizações em tempo real.