Ich benutze C++. Ich habe verschiedene Klassen, die im Grunde Strategien sind, um das Gleiche zu tun. Wir haben die Basisklasse Strategy
, von der erweiterte Strategien erben. Jede direkte oder indirekte Unterklasse von Strategy
hat eine Methode run()
. Eine fortgeschrittene Strategie wird oft innerhalb ihrer Methode run()
die Methode run()
ihres Elternteils aufrufen und dann einige Pre- oder Post-Processing hinzufügen. Es könnte auch viele Male innerhalb einer Schleife aufgerufen werden.Strategien mit gängigen Methoden und Datenstruktur
Jetzt werden alle diese Strategien auf die gleiche DataStruct
angewendet. In der Tat ist das einzigartige DataStruct
für jede Strategie gut definiert. Innerhalb jeder Strategie kann jedoch die Bedeutung von DataStruct
nicht dieselbe sein.
Lassen Sie mich Ihnen ein einfaches Beispiel: Stellen Sie sich vor StrategyA
hat einige Optimierung über einen Satz A, während StrategyAUnionB
Optimierung funktioniert über die Menge A Union B. DataStruct.optimalValue
für beide eine Bedeutung hat aber die Bedeutung ist nicht das gleiche.
Die einfache Lösung, die ich jetzt sehe, ist ein Attribut dataStruct
vom Typ DataStruct
in der Basisklasse zu setzen, und wenn eine Strategie die run()
von einer übergeordneten Klasse nennt es eine Kopie dataStruct
machen muss, dass es dataStruct
zu aktualisieren verwenden nach dem Aufruf an run()
der Elternklasse.
Ich sehe deutlich, dass diese Lösung nicht sehr sauber ist und ich würde dankbar sein, wenn ich einen Rat von erfahreneren Programmierern bekommen kann.
Ich glaube nicht, dass diese Lösung funktioniert, weil jeder das gleiche DataStruct-Objekt modifizieren wird ... Eine Trennung zwischen Strategie und Datastruct könnte jedoch eine gute Idee sein. –