Arbeiten mit .NET: Entwurfsmuster/ Structural Patterns/ Bibliothekseinbindung
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); } } }