Wieso schreibt man nicht einfach ein Werkzeug pro Figur? Dann fallen alle Fragen weg.
Ich hab ne TFigur.
Wenn ich sie zeichnen will, nehme ich einen TFigurPainter, bzw. ne abgeleitete Klasse, oder ne Klasse, die das IFigurPainter-Interface implementiert
Und wenn ich die TFigur speichern will, dann nehme ich ... einen TFigurWriter...
Und wenn ich die TFigur laden will, dann ...
Und wenn ich die TFigur drucken will, dann ...
Und wenn ich die TFigur backen will, dann ...
usw. usw.
Daraus kann man dann sogar eine Factory-Factory bauen:
Delphi-Quellcode:
Procedure TuWasMitDerFigur (DieAktion : FigurAktion; Figur : TFigure);
Var
Aktion : TFigurAktion;
AktionFactory : TFigureAktionFactory;
Begin
AktionFactory := TFigurAktionFactoryFactory.CreateFactory(DieAktion);
Aktion := AktionFactory.Create(Figur);
Aktion.FühreAus(Figur);
End;
Die TFigurAktionFactoryFactory liefert eine TFigurAktionFactory, je nach inhalt von 'DieAktion' (Laden,Speichern,Zeichnen,Drucken,Backen).
Und die AktionFactory liefert die ensprechende Aktionsklasse für die Figur.
Und die Aktion führt die Aktion aus
Diesen Code musst Du nie wieder ändern. Du registrierst nur weitere Figuren, Aktionen und deklarierst neue FigurAktion('Tanzen' z.B. oder.. äh.. heiraten, keine Ahnung). D.h.: Du änderst den Code nie wieder (OCP).