DEV Community

Cristiano Rodrigues for Unhacked

Posted on

1 1

Padrão Composite em C#

O que é o Padrão Composite? O Padrão Composite é uma técnica de design estrutural que permite tratar objetos individuais e grupos de objetos da mesma maneira. Isso facilita a criação de hierarquias de objetos, onde cada elemento pode ser um item único ou um conjunto de itens. Essa abordagem promove a flexibilidade e a escalabilidade em sistemas complexos, tornando-o uma ferramenta essencial para desenvolvedores.

Um Exemplo prático: Gerenciamento de Arquivos. Imagine um sistema de gerenciamento de arquivos onde você tem arquivos individuais, como documentos e imagens, e pastas que podem conter esses arquivos e outras pastas. O Padrão Composite é perfeito para isso, pois permite que o sistema trate arquivos e pastas de forma uniforme. Por exemplo: você pode criar um método para imprimir a estrutura do sistema de arquivos sem precisar saber se o objeto é um arquivo ou uma pasta.

Estrutura do Padrão Composite

Componente: A interface que define como os objetos serão tratados. No nosso exemplo, seria a interface FileSystemItem.

Objeto Folha: Itens individuais, como arquivos.

Objeto Composto: Itens que podem conter outros, como pastas.

Cliente: O código que interage com os objetos, sem precisar saber se são individuais ou compostos.

Vantagens do Padrão Composite

Flexibilidade: Permite tratar objetos de diferentes tipos de forma uniforme.
Escalabilidade: Facilita a adição de novos tipos de objetos sem alterar o código existente.
Simplificação do Código: Reduz a complexidade do código, pois não é necessário tratar cada tipo de objeto de forma diferente.

Vamos criar um sistema de gerenciamento de arquivos simplificado utilizando C#.

using System;
using System.Collections.Generic;

// Componente
interface IFileSystemItem
{
    void Print(string indent);
}

// Objeto Folha
class File : IFileSystemItem
{
    private string name;

    public File(string name)
    {
        this.name = name;
    }

    public void Print(string indent)
    {
        Console.WriteLine(indent + name);
    }
}

// Objeto Composto
class Folder : IFileSystemItem
{
    private string name;
    private List<IFileSystemItem> children = new List<IFileSystemItem>();

    public Folder(string name)
    {
        this.name = name;
    }

    public void Add(IFileSystemItem item)
    {
        children.Add(item);
    }

    public void Remove(IFileSystemItem item)
    {
        children.Remove(item);
    }

    public void Print(string indent)
    {
        Console.WriteLine(indent + "+ " + name);
        foreach (var child in children)
        {
            child.Print(indent + "  ");
        }
    }
}

class Program
{
    static void Main(string[] args)
    {
        // Criando objetos folha
        var file1 = new File("Document.txt");
        var file2 = new File("Image.png");

        // Criando objeto composto
        var folder1 = new Folder("Folder 1");
        folder1.Add(file1);
        folder1.Add(file2);

        // Criando objeto composto dentro de outro objeto composto
        var folder2 = new Folder("Folder 2");
        folder2.Add(folder1);

        // Imprimindo a estrutura
        folder2.Print("");
    }
}
Enter fullscreen mode Exit fullscreen mode

Neste exemplo, File e Folder implementam a interface IFileSystemItem permitindo que o sistema trate ambos de forma uniforme. O método Print é chamado em todos os objetos, seja um arquivo ou uma pasta, para imprimir a estrutura do sistema de arquivos.

Conclusão

Em resumo, o Padrão Composite é uma técnica de design estrutural que permite tratar objetos individuais e compostos de forma uniforme, promovendo flexibilidade e escalabilidade em sistemas complexos. Ao implementar esse padrão, você pode criar hierarquias de objetos robustas e fáceis de manter, permitindo que sua aplicação cresça e evolua com facilidade.

Sentry image

See why 4M developers consider Sentry, “not bad.”

Fixing code doesn’t have to be the worst part of your day. Learn how Sentry can help.

Learn more

Top comments (0)

Image of Docusign

🛠️ Bring your solution into Docusign. Reach over 1.6M customers.

Docusign is now extensible. Overcome challenges with disconnected products and inaccessible data by bringing your solutions into Docusign and publishing to 1.6M customers in the App Center.

Learn more