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.
Código fonte: GitHub
Top comments (0)