Evgenii Legotckoi
21 вересня 2018 р. 13:13

Приклад - шаблон дизайну "Будівельник" у Делі

Зміст

Функціональність, що використовується у 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;

Вам це подобається? Поділіться в соціальних мережах!

Коментарі

Only authorized users can post comments.
Please, Log in or Sign up