Заводской метод проектирования выкройки
Фабричный метод — это творческий шаблон проектирования, т. е. связанный с созданием объекта. В шаблоне Factory мы создаем объекты, не раскрывая логику создания клиенту, и клиент использует тот же общий интерфейс для создания нового типа объекта.
Идея состоит в том, чтобы использовать статическую функцию-член (статический фабричный метод), которая создает и возвращает экземпляры, скрывая от пользователя детали модулей класса.
Фабричный шаблон — это один из основных принципов проектирования для создания объекта, позволяющий клиентам создавать объекты библиотеки (поясняется ниже) таким образом, чтобы они не были тесно связаны с иерархией классов библиотеки.
Что имеется в виду, когда мы говорим о библиотеках и клиентах?
Библиотека — это то, что предоставляется какой-либо третьей стороной, которая предоставляет некоторые общедоступные API-интерфейсы, и клиенты выполняют вызовы этих общедоступных API-интерфейсов для выполнения своих задач. Очень простым примером могут быть различные виды представлений, предоставляемые ОС Android.
Почему фабричный шаблон?
Давайте разберемся на примере:
Какие проблемы с вышеуказанной конструкцией?
Как вы, должно быть, заметили в приведенном выше примере, клиент создает объекты либо TwoWheeler, либо FourWheeler на основе некоторого ввода во время создания своего объекта.
Скажем, библиотека вводит новый класс ThreeWheeler, который также включает трехколесные транспортные средства. Что случилось бы? Клиент в конечном итоге создаст новую цепочку else, если в условной лестнице создаст объекты ThreeWheeler. Что, в свою очередь, потребует перекомпиляции клиента. Таким образом, каждый раз, когда на стороне библиотеки вносятся новые изменения, Клиент должен будет внести некоторые соответствующие изменения в конце и перекомпилировать код. Звучит плохо? Это очень плохая практика дизайна.
Как избежать проблемы?
Ответ заключается в том, чтобы создать статический (или фабричный) метод. Давайте посмотрим на приведенный ниже код.
В приведенном выше примере мы полностью отделили выбор типов для создания объекта от клиента. Теперь библиотека отвечает за принятие решения о том, какой тип объекта создавать на основе входных данных. Клиенту просто нужно сделать вызовы библиотечного фабричного метода Create и передать нужный тип, не беспокоясь о фактической реализации создания объектов.
Другие примеры фабричного метода:
- Скажем, в системе «Рисование», в зависимости от ввода пользователя, могут быть нарисованы разные изображения, такие как квадраты, прямоугольники, круг. Здесь мы можем использовать фабричный метод для создания экземпляров в зависимости от ввода пользователя. Для добавления нового типа фигуры не нужно менять код клиента.
- Другой пример: на туристическом сайте мы можем бронировать билеты на поезд, а также билеты на автобус и авиабилеты. В этом случае пользователь может указать свой тип поездки как «автобус», «поезд» или «самолет».
Здесь у нас есть абстрактный класс AnyTravel со статической функцией-членом GetObject, которая в зависимости от типа поездки пользователя создаст и вернет объект BusTravel или TrainTravel. «BusTravel» или «TrainTravel» имеют общие функции, такие как имя пассажира, параметры отправления и пункта назначения.
Дальнейшее чтение: Фабричный метод в Python
Пожалуйста, пишите комментарии, если вы обнаружите что-то неправильное или если вы хотите поделиться дополнительной информацией по теме, обсуждаемой выше.