Evgenii Legotckoi
Қыр. 21, 2018, 1:13 Т.Қ.

Мысал – Delphi Builder дизайн үлгісі

Мазмұны

Функциональность, используемая в 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;

Ол саған ұнайды ма? Әлеуметтік желілерде бөлісіңіз!

Пікірлер

Тек рұқсаты бар пайдаланушылар ғана пікір қалдыра алады.
Кіріңіз немесе Тіркеліңіз