Wie Vererbung bauen /Design Pattern
-
Hallo,
ich möchte folgendes machen:
Ich möchte eine Klasse schreiben die mir ein file einliest und gleichzeitig meine Datenstruktur spezifisch aufbaut aus den eingelesenen daten. Nun ist es so dass das file eine spezielle struktur hat und damit die einleseprozedur speziell ist.
Ich möchte das aber so modular (vererbung) aufbauen dass man später auch noch eine weitere möglihckeit hat eine andere variante zu implementieren wenn das file eine andere struktur hat.
Ich vermute irgendwie über abstrakte methoden und implementierung der abstrakten methode aus einer basisklasse...Ist das Blödsinn? Bzw. ich weiß nicht genau wie ich anfangen soll bzw. ob ich ein spezielles design pattern dafür verwenden sollte...
-
schau dir mal das factory pattern an. Der factory gibst du die Datei, die parst die Datei und gibt dir entweder direkt das Objekt oder einen Zeiger auf ein dynamisch allokiertes Objekt der Klasse (oder einer abgeleiteten Klasse)
-
naja....es geht mir jetzt weniger darum dass ich ein file parsen will...
prinzipiell um den sachverhalt:
Ich möchte für einen input bzw. eine vorliegendes Problem A spezielle Methoden foo() und bar() implementieren. Dies allerdings so dass ich es schnell erweitern kann falls input B bzw. Problem B kommt. Hier möchte ich dann nur foo() und bar() anders implementieren wobei der rest unberührt bleibt und noch funktioniert.
Wäre das evtl. ein Template Method Pattern?
-
ja, das wäre eine möglichkeit.
-
und wie könnte man es schaffen dass abhängig von der einleseprozedur das richtige template instantiiert wird? Mir fällt nix anderes ein als z.B. über ein eingabe-parameter (int) zu sagen welche Klasse instantiiert werden soll mit der richtigen einleseprozedur. das wäre dann ein switch-statement oder ein paar if-abfragen.
ginge das auch anders?
-
Geh die Frage mal logisch an, es gibt grob gesagt 4 verschiedene Entscheidungsstrukturen in C++, unterteilt nach zwei Kategorien:
a) Zeitpunkt der Entscheidung (Compilezeit, Laufzeit)
b) Grundlage der Entscheidung (Entscheidung anhand von Typen, Entscheidung anhand von Werten)Für Compilezeit-Entscheidungen anhand von Typen gibts Templates.
Für Compilezeit-Entscheidungen anhand von Werten gibts Templates und eine Handvoll Operatoren die zur Compilezeit ausgewertet werden können (z.B. ?:)Für Laufzeit-Entscheidungen anhand von Typen gibts dynamische Polymorphie und die RTTI-Geschichten, die aus Typinfomrationen Werte machen, also Laufzeit-Entscheidungen anhand von Werten.
Für Laufzeit-Entscheidungen anhand von Werten kommen nur if, case und zur Laufzeit ausgewertete ?: Operatoren in Frage (was dann auch nur if-else ist). Andere Möglichkeiten gibts nicht.
Welche von den vier Kategorien du hast und was daher für die Umsetzung in Frage kommt kannst du dir ja selbst denken

-
Strategy ist ein hier passendes Design Pattern
