DEV Community

Juarez Júnior
Juarez Júnior

Posted on

C# Design Pattern: Adapter (Portugues)

O padrão Adapter é útil quando você precisa que duas classes com interfaces incompatíveis trabalhem juntas. Ele cria uma “ponte” entre as classes, convertendo a interface de uma classe em outra esperada por um cliente. Isso é útil em situações como integrar uma nova funcionalidade ou biblioteca a um sistema existente, onde as interfaces não são compatíveis, ou quando você deseja reutilizar uma classe existente sem modificá-la diretamente.

Exemplo de Código em C#:

// Classe existente (incompatível com o cliente)
public class TomadaEuropeia
{
    public void ConectarPlugEuropeu()
    {
        Console.WriteLine("Plug europeu conectado à tomada europeia.");
    }
}

// Interface do cliente
public interface ITomada
{
    void Conectar();
}

// Adapter que torna a classe TomadaEuropeia compatível com a interface ITomada
public class TomadaAdapter : ITomada
{
    private TomadaEuropeia _tomadaEuropeia;

    public TomadaAdapter(TomadaEuropeia tomadaEuropeia)
    {
        _tomadaEuropeia = tomadaEuropeia;
    }

    public void Conectar()
    {
        // Adaptando a chamada
        _tomadaEuropeia.ConectarPlugEuropeu();
    }
}

// Cliente que usa a interface ITomada
class Program
{
    static void Main(string[] args)
    {
        // Cliente precisa de uma tomada compatível com ITomada
        ITomada tomada = new TomadaAdapter(new TomadaEuropeia());
        tomada.Conectar();  // Saída: Plug europeu conectado à tomada europeia.
    }
}
Enter fullscreen mode Exit fullscreen mode

Explicação do Código:

Neste exemplo, temos a classe TomadaEuropeia, que possui um método específico, mas incompatível com a interface ITomada, que o cliente espera. O TomadaAdapter é criado para fazer essa ponte entre o cliente e a classe TomadaEuropeia, adaptando a chamada de Conectar() para ConectarPlugEuropeu(). O código principal demonstra como o cliente consegue usar o adaptador para trabalhar com a tomada europeia sem precisar alterá-la diretamente.

Conclusão:

O padrão Adapter é útil para integrar classes com interfaces incompatíveis, permitindo que trabalhem juntas sem modificações nas suas implementações originais. Ele é ideal para cenários onde você deseja reutilizar ou integrar novas funcionalidades a sistemas existentes sem quebrar ou reescrever o código já desenvolvido.

Código fonte: GitHub

Top comments (0)