DEV Community

Juarez Júnior for Develop4Us

Posted on • Edited on

C# Design Pattern: Composite (Portugues)

O padrão Composite é usado quando você tem objetos que podem ser organizados em estruturas hierárquicas, como árvores. Ele permite tratar objetos individuais e composições de objetos da mesma forma. Um exemplo prático seria um sistema de arquivos, onde pastas podem conter arquivos ou outras pastas, e você quer poder executar operações em qualquer um deles de maneira uniforme.

Exemplo de Código em C#:

// Componente base
public interface IComponente
{
    void Exibir();
}

// Objeto folha (um arquivo, por exemplo)
public class Arquivo : IComponente
{
    private string _nome;

    public Arquivo(string nome)
    {
        _nome = nome;
    }

    public void Exibir()
    {
        Console.WriteLine($"Arquivo: {_nome}");
    }
}

// Objeto composto (uma pasta, por exemplo)
public class Pasta : IComponente
{
    private string _nome;
    private List<IComponente> _componentes = new List<IComponente>();

    public Pasta(string nome)
    {
        _nome = nome;
    }

    public void Adicionar(IComponente componente)
    {
        _componentes.Add(componente);
    }

    public void Exibir()
    {
        Console.WriteLine($"Pasta: {_nome}");
        foreach (var componente in _componentes)
        {
            componente.Exibir();
        }
    }
}

class Program
{
    static void Main(string[] args)
    {
        // Criar arquivos e pastas
        Arquivo arquivo1 = new Arquivo("arquivo1.txt");
        Arquivo arquivo2 = new Arquivo("arquivo2.txt");

        Pasta pasta1 = new Pasta("Documentos");
        pasta1.Adicionar(arquivo1);
        pasta1.Adicionar(arquivo2);

        // Exibir estrutura da pasta
        pasta1.Exibir();
    }
}
Enter fullscreen mode Exit fullscreen mode

Explicação do Código:

No exemplo, Arquivo é um objeto simples (folha), enquanto Pasta pode conter outros arquivos ou pastas (composição). Ambos implementam a interface IComponente, permitindo que sejam tratados de forma uniforme. No código principal, uma pasta é criada contendo dois arquivos, e a estrutura é exibida de forma hierárquica.

Conclusão:

O padrão Composite é útil quando você precisa lidar com estruturas hierárquicas, como sistemas de arquivos ou menus de navegação, permitindo que você trate objetos simples e composições de objetos da mesma maneira.

Código fonte: GitHub

Top comments (0)