ich suche ein Programmiermuster oder -konzept, mit dem ich auf einem Objekt bestimmte Aktionen anwenden kann. Um das besser zu illustrieren, habe ich mir ein Beispiel ausgedacht. Gegeben sei ein Quadrat (oder ein anderes geometrisches Element). Auf dieses Quadrat soll man nun bestimmte Aktionen anwenden können, so z.B. an eine andere Position im (Koordinaten)System bewegen (Move), rotieren lassen (Rotate), spiegeln (Flip) oder die Größe ändern (Resize).
Nun kann man ja platt einfach entsprechende Methoden auf die Quadrat-Klasse implementieren, das ist mir aber zu unflexibel, denn für jede neue Aktion muss ich ja auch eine neue Methode implementieren. Deshalb würde ich eigentlich favorisieren, die Aktionen als Klasse zu implementieren und denen einfach ein Protokoll vorzuschreiben, dass die Aktionsklassen implementieren müssen, damit sie als Aktion "durchgehen". Die Quadratklasse bekäme dann lediglich eine apply - Methode, der eine Liste an Aktionen zu übergeben ist.
Wie könnte man das noch implementieren? Für jede Aktion ein neues Quadrat erstellen und zurückgeben lassen? Das Ursprungsquadrat immer ändern? Insgesamt klingt das Konzept ein wenig wie das Decorator-Pattern aus meinem Entwurfsmuster-Buch (für Java).
Pseudocode meines bisherigen Konzepts:
Code: Alles auswählen
q = Quadrat(size=4, position=(2,1))
q.apply([Resize(factor=0.5), Move(4,4), Rotate(angle=45)])
Code: Alles auswählen
q = Quadrat(size=4, position=(2,1))
for action in [Resize(factor=0.5), Move(4,4), Rotate(angle=45)]:
q = q.apply(action)