Genau.
Was die Controls zeichnen geht von außen niemanden etwas an.
Ob sie intern ein Polygon verwalten oder mehrere Farben oder Textumbrüche ist normalerweise Privatsache der spezialisierten Klasse.
Nach außen musst Du ja nur das öffentlich machen, was die Umgebung Deiner Werkzeuge interessiert.
Du kannst Deine Basisklasse ja rel. klein halten:
Delphi-Quellcode:
TBaseClass = class
public
procedure Paint; virtual;
end;
und in Deinen abgeleiteten Klassen führst Du private Detaileigenschaften ein:
Delphi-Quellcode:
TClassA = class(TBaseClass)
private
Polygon...
public
procedure Paint; override;
end;
TClassB = class(TBaseClass)
private
Text...
public
procedure Paint; override;
end;
Die Daten musst Du natürlich ggf. von außen klassenspezifisch zuweisen, aber die Basisklasse muss ja nicht alle Varianten kennen sondern nur die einheitlichen Eigenschaften.
Eine Factory wird Dir hier nichts bringen. Ich denke, Du musst die Klasseneigenschaften nur besser nach tatsächlichen Aufgaben trennen.
Müssen Deine Klassen noch etwas anderes machen, als sich zu zeichnen?