Evgenii Legotckoi
21 сентября 2018 г. 13:13

Пример - Шаблон проектирования Строитель на Delphi

Содержание

Функциональность, используемая в VCL Delphi для создания форм и компонентов, похожа на концепцию строителя. Delphi создает формы, используя общий интерфейс, через Application.CreateForm и через конструктор класса TForm. TForm реализует общий конструктор, используя информацию о ресурсах (файл DFM), чтобы создать экземпляр компонентов, принадлежащих форме. Многие классы потомков повторно используют этот же процесс построения для создания разных представлений. Delphi также упрощает разработку расширений. Событие OnCreate от TForm также добавляет hook в процесс создания, чтобы упростить работу.


Пример

Следующий пример включает класс TAbstractFormBuilder и два конкретных класса TRedFormBuilder и TBlueFormBuilder. Для простоты разработки некоторые общие функциональные возможности конкретных классов были перемещены в общий класс TAbstractFormBuilder.

  1. type
  2. TAbstractFormBuilder = class
  3. private
  4. FForm: TForm;
  5. procedure BuilderFormClose(Sender: TObject; var Action: TCloseAction);
  6. protected
  7. function GetForm: TForm; virtual;
  8. public
  9. procedure CreateForm(AOwner: TComponent); virtual;
  10. procedure CreateSpeedButton; virtual; abstract;
  11. procedure CreateEdit; virtual; abstract;
  12. procedure CreateLabel; virtual; abstract;
  13. property Form: TForm read GetForm;
  14. end;
  15.  
  16. type
  17. TRedFormBuilder = class(TAbstractFormBuilder)
  18. private
  19. FNextLeft, FNextTop: Integer;
  20. public
  21. procedure CreateForm(AOwner: TComponent); override;
  22. procedure CreateSpeedButton; override;
  23. procedure CreateEdit; override;
  24. procedure CreateLabel; override;
  25. end;
  26.  
  27. type
  28. TBlueFormBuilder = class(TAbstractFormBuilder)
  29. private
  30. FNextLeft, FNextTop: Integer;
  31. public
  32. procedure CreateForm(AOwner: TComponent); override;
  33. procedure CreateSpeedButton; override;
  34. procedure CreateEdit; override;
  35. procedure CreateLabel; override;
  36. end;

Во время выполнения клиентское приложение инструктирует один из конкретных классов создавать части, используя процедуры создания публичных частей. Экземпляр конкретного строителя передается следующей процедуре:

  1. procedure TForm1.Create3ComponentFormUsingBuilder(ABuilder: TAbstractFormBuilder);
  2. var
  3. NewForm: TForm;
  4. begin
  5. with ABuilder do begin
  6. CreateForm(Application);
  7. CreateEdit;
  8. CreateSpeedButton;
  9. CreateLabel;
  10. NewForm := Form;
  11. if NewForm <> nil then NewForm.Show;
  12. end;
  13. end;

Вам это нравится? Поделитесь в социальных сетях!

Комментарии

Только авторизованные пользователи могут публиковать комментарии.
Пожалуйста, авторизуйтесь или зарегистрируйтесь