- 1. Приклад
Цей шаблон ідеальний там, де ви хочете ізолювати свою програму від реалізації конкретних класів. Наприклад, якщо ви хочете накласти 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;
Під час виконання наші клієнтські програми створює екземпляр фабрики з конкретним класом, а потім використовує абстрактний інтерфейс. Частини клієнтської програми, що використовує фабрику, не повинні знати, який конкретний клас дійсно використовується.