top of page

C# Design Pattern: Composite

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();
    }
}

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.


0 visualização

Posts recentes

Ver tudo

Dica C#: Default Interface Methods

Vamos falar sobre uma novidade do C# 12: Default Interface Methods. Esse recurso permite que interfaces contenham implementações de...

Dica C#: Global Using Directives

Vamos para uma dica do C# 10: Global Using Directives. Com essa funcionalidade, você pode definir diretivas using globais que se aplicam...

bottom of page