Meine Konkrete Frage zum Template Method Pattern ist:
Wenn eine abgeleitete Klasse nur zusätzlich etwas tun soll, wie bringt man das in das "Skelett" ein? Es macht doch wenig Sinn eine dummy-variable anzulegen die im Fall A nicht intialisiert wird und im Fall B schon, diese dann an die virtuelle Fuktion zu übergeben oder? Aber andererseits müsste man doch wieder das ganze Skelett virtuell machen, wenn man in einer Version zusätzliche Variablen verwenden will und in der anderen nicht?
Ich versuche meine Frage an einem pseudo-beispielcode zu erklären:
C++:
class skelett { public: void my_algorithm() { int* a = NULL; init_b();
class FallA : public skelett { protected: virtualint* make_this() { returnNULL; } virtualvoid compute(int* a) { //mache was ohne a zu verwenden } };
class FallB : public skelett { protected: virtualint* make_this() { //initialisiere a a = newint[4]; } virtualvoid compute(int* a) { //hier mit a irgendwelche sachen machen } };
Ob das jetzt im konkreten Fall sinnvoll ist oder nicht hängt natürlich vom Beispiel ab Aber es ist ja technisch möglich und stinkt jetzt m.M. nach auch nicht zum HImmel. Wenn das Skelett nichts damit macht, kannst Du "a" ja bedenkenlos uninitailisiert lassen, um dann in compute eben ohne "a" arbeiten zu können. Andererseits: wenn das Skelett mit "a" wirklich nichts macht, warum muss es sich dann damit befassen und es von Methode zu Methode weitergeben ? Dann könnte "a" ja auch komplett von den konkreten, abgeleiteten Klassen verwaltet werden. -- Reden ist Schweigen und Silber ist Gold.