Ich verstehe nicht ganz, wieso es 3 Felder für die Farbe gibt - wieso reicht nicht eines?
Was den redundanten Code angeht: Du kannst das ganze ja in etwa so machen:
Delphi-Quellcode:
TBasisKlasse = class
protected
function GetFieldName: string; virtual; abstract;
public
procedure DoSomething;
end;
TKlasse 1 = class(TBasisKlasse)
protected
function GetFieldName: string; override;
end;
TKlasse 2 = class(TBasisKlasse)
protected
function GetFieldName: string; override;
end;
procedure TBasisKlasse.DoSomething;
begin
{ viel code ... }
FQuery.SQL.Text := 'UPDATE xyz SET '+GetFieldName+'=123 WHERE id=3';
{viel code ... }
end;
function TKlasse1.GetFieldName: string;
begin
Result := 'Klasse1Farbe';
end;
function TKlasse2.GetFieldName: string;
begin
Result := 'Klasse2Farbe';
end;
Alternativ kann man natürlich auch den jeweiligen Namen im Konstruktor in einem Feld speichern. Bei komplexeren Sachen bitet sich die obere Methode aber an. Ich glaube es gibt auch einen Namen für dieses Pattern, aber das will mir jetzt nicht einfallen...
Aber wie gesagt erschließt sich mir in deinem Fall der Sinn nicht ganz.