Arbeiten mit .NET: Entwurfsmuster/ Structural Patterns/ Bibliothekseinbindung


C#-Code:  

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