- 1. Пример
Этот шаблон полезен, если вы хотите инкапсулировать создание класса и изолировать информацию о конкретном классе от клиентского приложения через абстрактный интерфейс.
Один из примеров этого может возникнуть, если у вас есть объектно-ориентированное бизнес-приложение, потенциально связанное с несколькими целевыми СУБД. Клиентское приложение только хочет знать о бизнес-классах, а не об их хранилище и конкретной реализации для извлечения данных.
Пример
В примере Abstract Factory каждая из функций создания виджета является виртуальным Factory Method. В своей реализации мы определяем конкретный класс виджетов в качестве возвращаемого значения.
- TRedSpeedButton = class(TSpeedButton)
- public
- constructor Create(AOwner: TComponent); override;
- end;
- constructor TRedSpeedButton.Create(AOwner: TComponent);
- begin
- inherited Create(AOwner);
- Font.Color := clRed;
- end;
- function TORedFactory.CreateSpeedButton(AOwner: TComponent): TSpeedButton;
- begin
- Result := TRedSpeedButton.Create(AOwner);
- end;