Перейти к основному содержимому

Фабрика (FactoryMethod)

Теория

Фабричный метод - определяет общий интерфейс создания объекта, но позволяет субклассам выбрать создаваемый экземпляр.

Абстрактная фабрика - предоставляет интерфейс создания объекта, но позволяет субклассам выбрать создаваемый экземпляр.

В 1С вместо наследования подклассов можно использовать общие модули, реализующие нужный фабричный метод.

Фабричный метод и Стратегия могут выглядеть очень похоже. Но есть отличия:

  • Паттерн Стратегия предполагает, что мы передаем на вход алгоритм/стратегию целиком. И внутри кода вызываем эту стратегию как «черный ящик».
Функция РассчитатьЦену(СтратегияРасчета, Заказ) Экспорт

// вызов переданной стратегии
Возврат СтратегияРасчета.Рассчитать(Заказ);

КонецФункции
  • А в Фабричном методе мы создаем и возвращаем на выходе новый объект. То есть фокус не на выполнении кода, а именно на создании объекта определенного типа.
Функция СоздатьДокумент(ТипДокумента) Экспорт

Если ТипДокумента = ОплатаПоставщику Тогда
Возврат Документы.ОплатаПоставщику.СоздатьДокумент();
ИначеЕсли ТипДокумента = ЗаказКлиента Тогда
Возврат Документы.ЗаказКлиента.СоздатьДокумент()
КонецЕсли;

КонецФункции

БСП

Реализация паттерна встречается, например, на отправке СМС через разных провайдеров. Модуль ОтправкаSMS.ОтправитьSMS. Получаем провайдера в МодульОтправкаSMSЧерезПровайдера.

Примеры

Код

Функция СоздатьЭкспорт(Направление) Экспорт

Если Направление = "Бухгалтерия" Тогда
Возврат ЭкспортБухгалтерия.СоздатьОбмен();
ИначеЕсли Направление = "AD" Тогда
Возврат ЭкспортAD.СоздатьОбмен();
ИначеЕсли Направление = "CRM" Тогда
Возврат ЭкспортCRM.СоздатьОбмен();
КонецЕсли;

КонецФункции

Экспорт = ЭкспортДанных.СоздатьЭкспорт("Бухгалтерия");
Экспорт.Выполнить();