DEV Community

Juarez Júnior
Juarez Júnior

Posted on

C# Design Pattern: Factory Method (Portugues)

O padrão Factory Method é usado para centralizar a criação de objetos com base em uma escolha ou critério. Em vez de ter várias classes de fábrica, podemos ter uma única classe responsável por criar diferentes tipos de objetos, como documentos, dependendo da necessidade. Isso é útil em situações como quando você precisa criar diferentes formatos de documentos, como PDF ou Word, sem precisar alterar o código principal sempre que um novo formato for adicionado.

Exemplo de Código em C#:

// Produto base
public abstract class Documento
{
    public abstract void Imprimir();
}

// Produto concreto 1
public class PdfDocumento : Documento
{
    public override void Imprimir()
    {
        Console.WriteLine("Imprimindo documento PDF.");
    }
}

// Produto concreto 2
public class WordDocumento : Documento
{
    public override void Imprimir()
    {
        Console.WriteLine("Imprimindo documento Word.");
    }
}

// Classe criadora centralizada
public class DocumentoFactory
{
    public enum TipoDocumento
    {
        PDF,
        WORD
    }

    public Documento CriarDocumento(TipoDocumento tipo)
    {
        switch (tipo)
        {
            case TipoDocumento.PDF:
                return new PdfDocumento();
            case TipoDocumento.WORD:
                return new WordDocumento();
            default:
                throw new ArgumentException("Tipo de documento desconhecido.");
        }
    }
}

class Program
{
    static void Main(string[] args)
    {
        DocumentoFactory factory = new DocumentoFactory();

        // Criar e imprimir um documento PDF
        Documento doc = factory.CriarDocumento(DocumentoFactory.TipoDocumento.PDF);
        doc.Imprimir();  // Saída: Imprimindo documento PDF.

        // Criar e imprimir um documento Word
        doc = factory.CriarDocumento(DocumentoFactory.TipoDocumento.WORD);
        doc.Imprimir();  // Saída: Imprimindo documento Word.
    }
}
Enter fullscreen mode Exit fullscreen mode

Explicação do Código:

Aqui, a classe DocumentoFactory centraliza a criação de diferentes tipos de documentos (PDF e Word). O método CriarDocumento recebe um parâmetro de enumeração TipoDocumento, que define qual tipo de documento deve ser criado. O método então cria e retorna a instância correta com base nesse tipo. No código principal, vemos como criar dinamicamente documentos PDF ou Word dependendo da necessidade.

Conclusão:

O Factory Method centraliza a criação de diferentes tipos de objetos, permitindo que a lógica de criação fique separada do código principal. Isso facilita a adição de novos tipos de objetos no futuro, sem alterar o código já existente. Ele é ideal para cenários onde a criação de objetos pode variar conforme diferentes fatores, como entradas de usuários ou configurações.

Código fonte: GitHub

Top comments (0)