Ich möchte das Composite-Entwurfsmuster in C++ verwenden, um Objektgruppen erstellen und bearbeiten zu können. Ein Problem, auf das ich gestoßen bin, ist, dass, da Blätter und Verbundwerkstoffe gleich behandelt werden und Verbundwerkstoffe aus Blättern und Verbundwerkstoffen bestehen, ein Objekt mehr als einmal bearbeitet werden kann, wenn ein Befehl an ein Verbundmaterial ausgegeben wird.Mit dem kombinierten Entwurfsmuster für Objekte unterschiedlichen Typs kann verhindert werden, dass ein Objekt mehr als einmal bearbeitet wird.
Zum Beispiel enthält eine zusammengesetzte Gruppe1 die Objekte A und B. Dann wird eine zusammengesetzte Gruppe2 erstellt, die die zusammengesetzte Gruppe1 und das Objekt A enthält. Wenn die zusammengesetzte Gruppe2 bearbeitet wird, wird Objekt A zweimal bearbeitet. Für einige Anwendungen denke ich, dass dies kein Problem ist, aber für meine Zwecke würde ich es mögen, wenn für jeden Befehl, der an einen Verbund ausgegeben wird, einzigartige Objekte nur einmal bearbeitet werden.
Gibt es einen idiomatischen Weg, um mit diesem Problem umzugehen, entweder wie man mehrere Aufrufe der Elementfunktion eines Objekts verhindert oder verhindert, dass ein Objekt mehr als einmal in einem Verbund enthalten ist?
-
Update: Mit "idiomatische" Ich meine "traditionelle" oder "akzeptiert" Art und Weise, diese Art von Problem der Handhabung. Ich vermute, ich nehme nur an/hoffe, dass dies ein häufiges Problem ist, das eine etablierte Lösung hat.
Ihr Problem ist, dass Objekt A zwei "Eltern" hat, was versuchen Sie hier zu erreichen? Warum ist dieses Objekt in zwei Gruppen? Wenn es sein muss, dann wird die Standardidee, eine Operation anzuwenden, nicht so funktionieren, wie Sie es erwartet haben. Sie müssen irgendwie verfolgen, welche Objekte Sie 'diese' Operation ausgeführt haben und nur für ein Objekt ausführen, wenn Sie dies nicht tun. –
Was ich versuche zu erreichen, ist die Flexibilität der Gruppen, die nicht nur aus einzelnen Objekten, sondern aus einer beliebigen Kombination von Objekten und bestehenden Gruppen erzeugt werden - im Grunde ist das Composite-Muster dafür geeignet, Blätter und Composites gleich behandeln zu können durch die Komponentenschnittstelle? – zebraman