- 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;