Evgenii Legotckoi
18 вересня 2018 р. 15:11

Приклад - Абстрактна фабрика в Delphi

Зміст

Цей шаблон ідеальний там, де ви хочете ізолювати свою програму від реалізації конкретних класів. Наприклад, якщо ви хочете накласти VCL Delphi на загальний рівень VCL для 16 та 32-бітових додатків, ви можете почати з абстрактної фабрики як база.


Приклад

У наступному прикладі використовуються абстрактні фабрики і два конкретні фабричні класи для реалізації різних стилів компонентів інтерфейсу користувача. TOAbstractFactory - це одноелементний клас, оскільки ми зазвичай хочемо, щоб одна фабрика використовувалася для всього додатку.

TOAbstractFactory = class(TObject)
  public
    constructor Create;
    destructor Destroy; override;

    //abstract widget constructors
    function CreateSpeedButton(AOwner: TComponent): TSpeedButton; virtual; abstract;
    function CreateEdit(AOwner: TComponent): TEdit; virtual; abstract;
    function CreateLabel(AOwner: TComponent): TLabel; virtual; abstract;
  end;

TORedFactory та TOBlueFactory перевизначають абстрактний інтерфейс для підтримки різних стилів віджетів.

TORedFactory = class(TOAbstractFactory)
  public
    //concrete widget constructors
    function CreateSpeedButton(AOwner: TComponent): TSpeedButton; override;
    function CreateEdit(AOwner: TComponent): TEdit; override;
    function CreateLabel(AOwner: TComponent): TLabel; override;
  end;

TOBlueFactory = class(TOAbstractFactory)
  public
    //concrete widget constructors
    function CreateSpeedButton(AOwner: TComponent): TSpeedButton; override;
    function CreateEdit(AOwner: TComponent): TEdit; override;
    function CreateLabel(AOwner: TComponent): TLabel; override;
  end;

Під час виконання наші клієнтські програми створює екземпляр фабрики з конкретним класом, а потім використовує абстрактний інтерфейс. Частини клієнтської програми, що використовує фабрику, не повинні знати, який конкретний клас дійсно використовується.

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

Коментарі

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