Ich habe Methoden in einem Programm, die dem Strategy-Muster entsprechen.
Für den Fall brauche ich allerdings keine Objekte, demnach wäre es ja irgendwo sinnlos dennoch welche zu erschaffen.
Jetzt ist die Frage, wie ich das ganze mit Klassenfunktionen anstellen soll.
Ich dachte mir, ich könnte Klassenfunktionen implementieren, die dann die abstrakten Methoden über Objekterzeugung innerhalb der Funktion aufrufen, aber die müsste ich dann in der erbenden Klasse implementieren, und das bringt mich ja nicht weiter.
Jetzt hatte ich nur noch die Idee, eine von der Vererbung unabhängige Klasse mit Klassenfunktionen nach außen bereit zu stellen, die dann jeweils das richtige Objekt erzeugt. Das richtige Verfahren für das Strategy-Muster müsste ich dann über Konstanten angeben lassen, aber dadurch hebt sich der Sinn von dem Design Pattern ja auf, weil dadurch doch ein wesentlicher Teil der Flexibilität verloren geht, und dann steh ich wieder am Anfang.
Gibt es da irgendeinen kleinen Trick, den ich nicht kenne?
[QUOTE=Morgyr]Für den Fall brauche ich allerdings keine Objekte, demnach wäre es ja irgendwo sinnlos dennoch welche zu erschaffen.
…
Ich dachte mir, ich könnte Klassenfunktionen implementieren, die dann die abstrakten Methoden über Objekterzeugung innerhalb der Funktion aufrufen,
[/QUOTE]
was sinnlos wäre, wie du oben schon gesagt hast
Wenn es da einen gibt, dann kenne ich ihn auch nicht (Reflection-Hacks mal außen vor gelassen). Polymorphie (also das, was man, wenn man es drauf anlegt, als das „Strategy Design Pattern“ bezeichnen kann) bezieht sich auf Objekte - und nicht auf Klassen. ( ← Punkt ;)) Vielleicht ist das, was du vorhast, auch „intuitiv“ eher durch das (in gewisser Hinsicht sehr ähnliche, und sich bei genauerer Betrachtung auch auf „Polymorphie“ reduzierende) „Command Pattern“ besser abzubilden - aber das ändert auch nichts daran, dass es immer nur Objekte (und eben nicht die Klassen) sind, die sich polymorph verhalten.
Hm, ok schade. Danke euch beiden.
Aber hat dann zumindest in soweit was gutes, dass ich mehr Flexibilität habe, wenn ich später dann notwendigerweise ein Objekt brauche. Dann muss ich ja nichts wesentliches mehr verändern.
Aber eine Frage noch, was meinst du, deathbyaclown, mit Memberfunktion? Ich dachte immer Member sind Objektmethoden bzw. -variablen, das wäre ja dann das Gegenteil von Klassenmethoden. Google hat mir auch irgendwie nichts sinnvolles ausgegeben.