Adapter
14. März 2020
Das Muster dient zur Übersetzung einer Schnittstelle in eine andere. Dadurch wird die Kommunikation von Klassen mit zueinander inkompatiblen Schnittstellen ermöglicht.
https://de.wikipedia.org/wiki/Adapter_(Entwurfsmuster)
Die Annahme hierbei ist, dass es bereits eine Klasse gibt, die wir nicht verändern können (Adaptee), die aber von einer anderen Klasse, die entweder auch nicht geändert werden kann oder nicht soll (Client), verwendet werden kann.
In diesem Fall wird ein Adapter erstellt, der zwischengeschalten wird.
public interface ILightningPhone
{
void Charge();
void UseLightning();
}
public interface IMicroUsbPhone
{
void Charge();
void UseMicroUsb();
}
public class ApplePhone : ILightningPhone
{
public void Charge()
{
}
public void UseLightning()
{
}
}
public class AndroidPhone : IMicroUsbPhone
{
public void Charge()
{
}
public void UseMicroUsb()
{
}
}
public class MicroUsbToLightningAdapter : IMicroUsbPhone
{
private readonly ILightningPhone _LightningPhone;
public MicroUsbToLightningAdapter(ILightningPhone lightningPhone)
{
_LightningPhone = lightningPhone;
}
public void Charge()
{
_LightningPhone.Charge();
}
public void UseMicroUsb()
{
_LightningPhone.UseLightning();
}
}
public class MicroUsbCharger
{
public void Charge(IMicroUsbPhone microUsbPhone)
{
microUsbPhone.Charge();
}
}
class Program
{
static void Main(string[] args)
{
var microUsbCharger = new MicroUsbCharger();
var applePhone = new ApplePhone();
var microUsbToLightningAdapter = new MicroUsbToLightningAdapter(applePhone);
microUsbCharger.Charge(microUsbToLightningAdapter);
}
}