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.
}
}
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)