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);