- 1. Пример
Функциональность, используемая в VCL Delphi для создания форм и компонентов, похожа на концепцию строителя. Delphi создает формы, используя общий интерфейс, через Application.CreateForm и через конструктор класса TForm. TForm реализует общий конструктор, используя информацию о ресурсах (файл DFM), чтобы создать экземпляр компонентов, принадлежащих форме. Многие классы потомков повторно используют этот же процесс построения для создания разных представлений. Delphi также упрощает разработку расширений. Событие OnCreate от TForm также добавляет hook в процесс создания, чтобы упростить работу.
Пример
Следующий пример включает класс TAbstractFormBuilder и два конкретных класса TRedFormBuilder и TBlueFormBuilder. Для простоты разработки некоторые общие функциональные возможности конкретных классов были перемещены в общий класс TAbstractFormBuilder.
- 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;
Во время выполнения клиентское приложение инструктирует один из конкретных классов создавать части, используя процедуры создания публичных частей. Экземпляр конкретного строителя передается следующей процедуре:
- 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;