Design-Frage: Klasse in Klassenhierarchie delegiert an andere Klasse derselben Hierarchie
-
Hallo,
Stark vereinfacht gesagt habe ich eine Klassenhierarchie ableitend von:class Metric:
virtual int distance() = 0;mit weiteren Klassen wie
class HexMetric : public Metric:
virtual int distance() {ImplementierungHEX}
class XYZMetric : public Metric:
virtual int distance() {ImplementierungXYZ}
usw.Nun soll es eine BoundedMetric geben, welche zur Implementierung von distance bereits bestehende Metrics nutzt, aber gewisse Randbedungungen testet etc.
Theoretisch gäbe es also eine BoundedHexMetric, BoundedXYZMetric etc.
Anstatt eine Vielzahl neuer Klassen einzuführen, habe ich es jetzt einfach so gemacht, dass zwar BoundedMetric auch von Metric ableitet (denn es IST eine Metric, in dem Sinn dass sie das gleiche Interface hat und auch überall dort eingesetzt werden kann wo die anderen Metrics eingesetzt werden können), aber sie erhält im Constructor einen Zeiger auf eine andere konkrete Metric aus der Klassenhierarchie auf der sie arbeiten soll.Also in etwa
class BoundedMetric : public Metric:
Metric* m;
BoundedMetric(Metric* m) : m(m) {} //ctor
virtual int distance() {Implementierung benutzt m->distance()}Ich kann soweit keine Nachteile feststellen, obwohl es natürlich etwas schräg aussieht bei der Konstruktion der BoundedMetric eine andere Metric als Argument mitzugeben.
Sieht hier irgendjemand ein Problem mit dieser Vorgehensweise?
Gibt es eine elegantere Implementierung?
Meine Frage bezieht sich auf C++, ich bin aber auch an einer Lösung in Python interessiert. Dort gibt es ja vielleicht Mehr möglichkeiten das schöner auszudrücken.
-
Suchst du vielleicht das Decorator Design Pattern?
-
Shade Of Mine schrieb:
Suchst du vielleicht das Decorator Design Pattern?
Jetzt wo du es sagst, Ja!
Also war meine Idee wohl gar nicht so abwegig.
Dann werd ich das so beibehalten.
Danke.