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