Arbeiten mit .NET: Entwurfsmuster/ Structural Patterns/ Bibliothekseinbindung
Erscheinungsbild
using System;
namespace Org.Wikibooks.De.Csharp.Pattern.Structural.Adapter.Praxis
{
/// <summary>
/// Diese Klasse befindet sich in unserem Framework
/// und erledigt diverse Aufgaben,
/// die teilweise schon von Drittanbietern implementiert wurden.
/// </summary>
class LokalerClient
{
public void LokaleOperation()
{
// Der Drittanbieter hat Funktionalität zur Verfügung gestellt,
// die eine spezielle Datumsverarbeitung ermöglicht.
// Anstatt das Rad neu zu erfinden,
// binden wir einfach seine Funktionalität ein.
DateTime datum = DateTime.Today;
Schnittstelle_Drittanbieter_Client schnittstelle = new Adapter_Drittanbieter();
string ergebnis = schnittstelle.VerarbeiteDatum(datum);
Console.WriteLine(ergebnis);
}
}
/// <summary>
/// Da der Client nicht mit den spezifischen Anforderungen
/// der Methoden des Drittanbieters vertraut ist,
/// schaffen wir eine Schnittstelle zwischen
/// Drittanbieter und Client.
/// </summary>
interface Schnittstelle_Drittanbieter_Client
{
string VerarbeiteDatum(DateTime datum);
}
/// <summary>
/// Der Adapter implementiert die spezifischen
/// Konvertierungsanforderungen der Parameter des Drittanbieters.
/// </summary>
class Adapter_Drittanbieter : Schnittstelle_Drittanbieter_Client
{
Drittanbieter.Bibliothek.DrittanbieterKlasse m_Objekt = new Drittanbieter.Bibliothek.DrittanbieterKlasse();
public string VerarbeiteDatum(DateTime datum)
{
// Da die Methode der Drittanbieterklasse
// einen String im UTC-Format erwartet,
// parsen wir hier das Datum,
// das uns unsere LokalerClient Klasse anbietet,
// in das erwartete Format um.
string parameterDatum = datum.ToUniversalTime().ToString("yyyy-MM-dd");
string ergebnis = m_Objekt.VerarbeiteDatum(parameterDatum);
return ergebnis;
}
}
}
namespace Drittanbieter.Bibliothek
{
/// <summary>
/// Die Klassen und Methoden des Drittanbieters
/// erledigen einen Teil unserer Aufgaben.
/// Allerdings stellen sie spezifische Anforderungen,
/// so dass eine unmittelbare Einbindung schwierig
/// zu pflegen ist.
/// </summary>
public class DrittanbieterKlasse
{
public string VerarbeiteDatum(string datumUtc)
{
// Hier erfolgt die spezielle Verarbeitung
// des übergebenen Parameters durch Funktionalität,
// die wir nicht selbst implementieren wollen oder können...
return String.Format("Das übergebene Datum {0} wurde verarbeitet.", datumUtc);
}
}
}