- 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;