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

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

Зміст

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

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

Коментарі

Only authorized users can post comments.
Please, Log in or Sign up
  • Останні коментарі
  • Evgenii Legotckoi
    16 квітня 2025 р. 17:08
    Благодарю за отзыв. И вам желаю всяческих успехов!
  • IscanderChe
    12 квітня 2025 р. 17:12
    Добрый день. Спасибо Вам за этот проект и отдельно за ответы на форуме, которые мне очень помогли в некоммерческих пет-проектах. Профессиональным программистом я так и не стал, но узнал мно…
  • AK
    01 квітня 2025 р. 11:41
    Добрый день. В данный момент работаю над проектом, где необходимо выводить звук из программы в определенное аудиоустройство (колонки, наушники, виртуальный кабель и т.д). Пишу на Qt5.12.12 поско…
  • Evgenii Legotckoi
    09 березня 2025 р. 21:02
    К сожалению, я этого подсказать не могу, поскольку у меня нет необходимости в обходе блокировок и т.д. Поэтому я и не задавался решением этой проблемы. Ну выглядит так, что вам действитель…
  • VP
    09 березня 2025 р. 16:14
    Здравствуйте! Я устанавливал Qt6 из исходников а также Qt Creator по отдельности. Все компоненты, связанные с разработкой для Android, установлены. Кроме одного... Когда пытаюсь скомпилиров…