Der Vorteil bei meiner Lösung liegt m.E. darin, dass ich mit einem Aufruf alles (also z.B. auch Parent, Höhe des THeaders, Ausrichtung, usw) erledigt habe. Das Zusammenbasteln des Strings ist ja nur eine kurze Eingabe der benötigten Werte, sollte eigentlich nicht schwer sein.
Würde aber dennoch gerne verstehen, welche Vorteile Du mit dem Factory-Ansatz siehst. Wird das dann nicht wieder mehr Schreiberei, oder wie ungefähr müsste man sich die Implementation vorstellen?
Deine Lösung erscheint aber auch nur auf den ersten Blick vorteilhaft (alles so schön zusammen).
Stell dir einmal dieses Interface vor
Delphi-Quellcode:
IHeaderBuilder = interface
function AddItem( const ATitle : string ) : IHeaderBuilder; overload;
function AddItem( const ATitle : string; AWidth : Integer ) : IHeaderBuilder; overload;
function AddItem( const ATitle : string; AWidth : Integer; AClickHandler : TNotifyEvent ) : IHeaderBuilder; overload;
// ... kann beliebig fortgesetzt werden
end;
dann kannst du das Erzeugen der Items in eigenen Routinen auslagern, ohne dort wissen zu müssen auf welche konkrete Instanz sich das auswirkt.
Delphi-Quellcode:
procedure TForm1.PrepareCustomersHeader( AHeader : IHeaderBuilder );
begin
AHeader
.AddItem( 'Name' )
.AddItem( 'Phone', 40 )
.AddItem( 'email', 80, SendMailOnClick );
end;
Und wie wir sehen ist es nicht ersichtlich ob das jetzt für FMX oder
VCL sein soll ... eben, das hängt einfach nur von der Implementierung ab. Die kann man jetzt gemütlich für
TListView
,
TStringGrid
oder welche Listenkomponente auch immer implementieren und trotzdem kann der Anwendungs-Code gleich bleiben.