Adapter
Problemet
Du har en klass med ett gränssnitt din kod förväntar sig (ITarget), och en annan klass som gör det du behöver men med ett helt annat gränssnitt (Adaptee) — t.ex. ett tredjepartsbibliotek du inte kan ändra.
Lösningen
// Gränssnittet din kod förväntar sigpublic interface ITarget{ void Request();}
// Den befintliga klassen — inkompatibelt gränssnitt, går inte att ändrapublic class Adaptee{ public void SpecificRequest() => Console.WriteLine("Specifik begäran hanterad");}
// Adaptern — översätter mellan de tvåpublic class Adapter : ITarget{ private readonly Adaptee _adaptee; public Adapter(Adaptee adaptee) => _adaptee = adaptee;
public void Request() => _adaptee.SpecificRequest();}ITarget target = new Adapter(new Adaptee());target.Request(); // Anropar SpecificRequest() bakom kulissernaKlientkoden pratar bara med ITarget — den vet aldrig att Adaptee med sitt annorlunda gränssnitt finns bakom.
Ett verkligt exempel — en strömadapter
Precis som en fysisk reseadapter (svenskt eluttag → amerikanskt) inte ändrar väggkontakten eller laddaren, utan bara översätter mellan dem — gör kod-adaptern samma sak mellan två API:er som inte var designade att prata med varandra.
TL;DR
Adapter lägger ett översättande lager mellan ett gränssnitt din kod förväntar sig och en klass som redan gör jobbet men talar “fel språk” — utan att ändra någon av de två.