DEV Community

Cover image for Padrões de Projeto em TypeScript: Singleton vs Factory vs Decorator
Vitor Rios
Vitor Rios

Posted on

2 1 1 1 1

Padrões de Projeto em TypeScript: Singleton vs Factory vs Decorator

Introdução

Padrões de projeto são métodos comprovados para resolver problemas comuns no desenvolvimento de software. TypeScript, com sua tipagem forte e recursos avançados, é uma linguagem poderosa para implementar esses padrões de forma eficaz. Vamos explorar detalhadamente alguns dos padrões de projeto mais utilizados: Singleton, Factory e Decorator.

1. Singleton

Conceito e Contexto

O Singleton é um padrão de criação que tem como objetivo garantir que uma classe tenha apenas uma instância em toda a aplicação, proporcionando um ponto de acesso global a ela. Esse padrão é útil quando precisamos de um controle centralizado e consistente de recursos, como conexões de banco de dados ou configurações de sistema.

Implementação em TypeScript

class Singleton {
    private static instance: Singleton;

    private constructor() {
        // construtor privado impede a instanciação direta
    }

    public static getInstance(): Singleton {
        if (!Singleton.instance) {
            Singleton.instance = new Singleton();
        }
        return Singleton.instance;
    }
}
Enter fullscreen mode Exit fullscreen mode

Discussão

A implementação do Singleton em TypeScript é direta. Usamos um construtor privado para prevenir a criação de instâncias externas e um método estático para gerenciar a instância única. Esse padrão é especialmente útil em TypeScript devido à sua natureza tipada, garantindo que o uso da instância Singleton seja consistente em toda a aplicação.

2. Factory

Conceito e Contexto

O padrão Factory é um padrão de criação que fornece uma interface para criar objetos em uma superclasse, permitindo que as subclasses alterem o tipo dos objetos criados. Esse padrão é frequentemente usado quando um sistema deve ser independente de como seus produtos são criados, compostos e representados.

Implementação em TypeScript

interface Product {
    doStuff(): void;
}

class ConcreteProductA implements Product {
    public doStuff() {
        console.log('Product A stuff');
    }
}

class ConcreteProductB implements Product {
    public doStuff() {
        console.log('Product B stuff');
    }
}

class Factory {
    public static createProduct(type: string): Product {
        switch (type) {
            case 'A': return new ConcreteProductA();
            case 'B': return new ConcreteProductB();
            default: throw new Error('Product type not supported.');
        }
    }
}
Enter fullscreen mode Exit fullscreen mode

Discussão

O padrão Factory em TypeScript é ideal para cenários onde temos várias implementações de uma interface e queremos abstrair a lógica de criação desses objetos. TypeScript adiciona uma camada de segurança, garantindo que os objetos criados sigam a interface definida.

3. Decorator

Conceito e Contexto

Decorator é um padrão de projeto estrutural que permite adicionar novas funcionalidades a objetos dinamicamente, envolvendo-os com novos comportamentos. É uma alternativa flexível à herança para estender a funcionalidade.

Implementação em TypeScript

interface Component {
    operation(): string;
}

class ConcreteComponent implements Component {
    public operation(): string {
        return 'ConcreteComponent';
    }
}

class Decorator implements Component {
    protected component: Component;

    constructor(component: Component) {
        this.component = component;
    }

    public operation(): string {
        return `Decorator(${this.component.operation()})`;
    }
}
Enter fullscreen mode Exit fullscreen mode

Discussão

O padrão Decorator em TypeScript é útil para adicionar responsabilidades a objetos de forma dinâmica e transparente. A tipagem forte do TypeScript garante que o componente decorado e o decorator cumpram a mesma interface, facilitando a interoperabilidade e mantendo a consistência.

Conclusão

Estes padrões de projeto em TypeScript demonstram a eficácia da linguagem em fornecer soluções robustas e escaláveis para problemas comuns de design de software. Com a tipagem forte e recursos avançados do TypeScript, os desenvolvedores podem implementar esses padrões de maneira eficiente, garantindo código limpo, manutenível e de alta qualidade.

Top comments (0)

nextjs tutorial video

Youtube Tutorial Series 📺

So you built a Next.js app, but you need a clear view of the entire operation flow to be able to identify performance bottlenecks before you launch. But how do you get started? Get the essentials on tracing for Next.js from @nikolovlazar in this video series 👀

Watch the Youtube series

👋 Kindness is contagious

Please leave a ❤️ or a friendly comment on this post if you found it helpful!

Okay