Шаблон проектирования Abstract Factory используется в случаях когда нужно добавить дополнительный слой абстракции над паттерном Factory.
Допустим есть следующие реализации классов разным моделей автомобилей:
class BMW_1_Series {} class BMW_M_Series {}
А также, пусть существуют фабрики для этих классов:
function bmwFamilyfactory() { return new BMW_1_Series() } function bmwSportFactory() { return new BMW_M_Series() }
Пример реализации функции абстрактной фабрики:
// Abstract Factory function bmwProducer(type) { switch (type) { case 'sport': return bmwSportFactory; case 'family': return bmwFamilyfactory; default: return null; } }
Теперь, чтобы использовать абстрактную фабрику нужно сначала инициализировать фабрику нужного типа, а затем создать экземпляр возвращаемого ей класса:
// Abstract Factory const produceSport = bmwProducer('sport'); const sportCar = produceSport(); const produceFamily = bmwProducer('family'); const familyCar = produceFamily();
В следующей статье рассмотрим шаблон проектирования под названием Prototype.