Adapter stosowany jest do przekształcania jednego interfejsu w drugi. Dzięki jego kontrukcji można dopasować niekompatybilną klasę i używać jej nadel bez ingerencji w jej budowę.
Załóżmy, że używamy biblioteki z metodą Add, która zwraca sumę przekazanych dwóch parametrów int. Po aktualizacji biblioteki metoda Add przyjmuje parametry float. W takiej sytuacji musielibyśmy zmienić wszędzie parametry. Ale można zastosować w tym miejscu wzorzec Adapter. CalcAdapter wywołuje funkcję Add po dokonaniu niezbędnych zmian (w naszym przykładzie konwersji między typami danych).
public abstract class ITarget
{
abstract public int Add(int a, int b);
}
public class CalcAdapter : ITarget
{
private Calculator calc;
public CalcAdapter()
{
calc = new Calculator();
}
public override int Add(int a, int b)
{
return (int)calc.Add((float)a, (float)b);
}
}
public abstract class INewTarget
{
abstract public float Add(float a, float b);
}
class Calculator : INewTarget
{
public override float Add(float a, float b)
{
return a + b;
}
}
// poprzednia wersja
//Calculator calc = new Calculator();
//calc.Add(10.0, 20.0);
// nowa wersja
CalcAdapter calcAdapter = new CalcAdapter();
calcAdapter.Add(10, 20);