[C++] XML Ausgabe über Template-Method-Pattern

The Prophet

Rear Admiral
Dabei seit
Aug. 2001
Beiträge
5.981
Hallo,

suche derzeit Informationen zur Implementierung von Template-Method-Pattern mit Hilfe von C++. Die Ausgabe des ganzen soll über XML passieren. Leider finden sich mit google meist nur Buchlinks oder Beschreibungen zu Pattern. Was ich suche ist ein vollständiges Beispiel um daran zu lernen und es für eigene Zwecke zu implementieren.

Mfg
 

7H3 N4C3R

Lt. Commander
Dabei seit
Feb. 2002
Beiträge
1.816
Was meinst du mit "die Ausgabe soll über XML erfolgen"? Das ist mir dabei jetzt nicht ganz klar. Ansonsten ist das Template-Method-Pattern recht einfach.

Oft delegiert man Aufgaben an Klassen, ohne ihren konkreten Typ zu kennen. Und zwar über virtuelle Methoden. Diese haben allerdings einen Nachteil. Was ist, wenn man immer eine bestimmte Aktion ausführen möchte, die in der Basisklasse implementiert ist? Dann müsste jeder, der die virtuelle Methode überschreibt, auch immer die darüberliegende Funktion explizit aufrufen. Dies erfordert schon sehr viel Disziplin. Allerdings fehlt dann immernoch etwas: Und zwar das Wissen in der Basisklasse, wann innerhalb einer geerbten virtuellen Methode die Basismethode aufgerufen wurde, und in welchem Zustand sich das Objekt gerade befindet.

Das ist sehr gefährlich. Beispielsweise dann, wenn die Basismethode den Zustand des Objektes ändert, die abgeleitete Methode aber nach fehlschlägt und eigentlich das Objekt in den Ursprungzustand versetzen müsste. Das geht so nun einfach nicht mehr.

Dafür bietet sich das Template-Method-Pattern an.

Code:
class Base
{
public:
   void doSomething();
protected:
   virtual void internalDoSomething() = 0;
};

void Base::doSomething()
{
   /// in einem definierten Zustand vorher etwas tun

   /// die eigentlich virtuelle Methode aufrufen
   internalDoSomething();

   /// in einem definierten Zustand nachher etwas tun
}


Beispielsweise für Datenbank-Klassen bietet sich in der Template-Methode (hat nichts mit dem C++-Sprachfeature gemein) das Aufrufen von Ereignissen wie "beforeUpdate" und "afterUpdate" an, die sonst nicht so einfach zu implementieren wären.
 
Zuletzt bearbeitet:

The Prophet

Rear Admiral
Ersteller dieses Themas
Dabei seit
Aug. 2001
Beiträge
5.981
Hallo ihr Zwei,

danke für eure Antworten. Mit dem Beispiel kann ich hoffentlich was anfangen habe ja noch eine Woche Zeit für die Lösung. Das Buch habe ich mir heute in der Bibliothek angeschaut. Damit werde ich wohl möglich arbeiten. Die Aufgabe mit der Ausgabe über XML hat sich als weiteres Teilgebiet herrausgestellt. Dazu kann ich allerdings noch keine weiteren Informationen liefern. Wenn ich dabei noch hilfe benötigen sollte werde ich mich mit Sicherheit nochmals melden.

Mfg
 
Top