- 1. Beispiel
Die in Delphi VCL zum Erstellen von Formularen und Komponenten verwendete Funktionalität ähnelt dem Builder-Konzept. Delphi erstellt Formulare unter Verwendung einer gemeinsamen Schnittstelle durch Application.CreateForm und durch den Konstruktor der TForm-Klasse. TForm implementiert einen generischen Konstruktor, der Ressourceninformationen (DFM-Datei) verwendet, um formulareigene Komponenten zu instanziieren. Viele Nachkommenklassen verwenden denselben Erstellungsprozess erneut, um verschiedene Ansichten zu erstellen. Delphi macht es auch einfach, Erweiterungen zu entwickeln. Das OnCreate-Ereignis von TForm fügt dem Erstellungsprozess auch einen Haken hinzu, um die Dinge einfacher zu machen.
Beispiel
Das folgende Beispiel enthält die Klasse TAbstractFormBuilder und zwei konkrete Klassen, TRedFormBuilder und TBlueFormBuilder. Zur Vereinfachung der Entwicklung wurden einige allgemeine klassenspezifische Funktionen in die generische TAbstractFormBuilder-Klasse verschoben.
type TAbstractFormBuilder = class private FForm: TForm; procedure BuilderFormClose(Sender: TObject; var Action: TCloseAction); protected function GetForm: TForm; virtual; public procedure CreateForm(AOwner: TComponent); virtual; procedure CreateSpeedButton; virtual; abstract; procedure CreateEdit; virtual; abstract; procedure CreateLabel; virtual; abstract; property Form: TForm read GetForm; end; type TRedFormBuilder = class(TAbstractFormBuilder) private FNextLeft, FNextTop: Integer; public procedure CreateForm(AOwner: TComponent); override; procedure CreateSpeedButton; override; procedure CreateEdit; override; procedure CreateLabel; override; end; type TBlueFormBuilder = class(TAbstractFormBuilder) private FNextLeft, FNextTop: Integer; public procedure CreateForm(AOwner: TComponent); override; procedure CreateSpeedButton; override; procedure CreateEdit; override; procedure CreateLabel; override; end;
Zur Laufzeit weist die Client-Anwendung eine der konkreten Klassen an, Teile unter Verwendung der öffentlichen Teilerzeugungsprozeduren zu erzeugen. Eine Instanz eines bestimmten Builders wird an die folgende Prozedur übergeben:
procedure TForm1.Create3ComponentFormUsingBuilder(ABuilder: TAbstractFormBuilder); var NewForm: TForm; begin with ABuilder do begin CreateForm(Application); CreateEdit; CreateSpeedButton; CreateLabel; NewForm := Form; if NewForm <> nil then NewForm.Show; end; end;