Фабричный метод на Go
Фабричный метод — это порождающий паттерн проектирования, который решает проблему создания различных продуктов, без указания конкретных классов продуктов.
Фабричный метод задаёт метод, который следует использовать вместо вызова оператора new
для создания объектов-продуктов. Подклассы могут переопределить этот метод, чтобы изменять тип создаваемых продуктов.
Концептуальный пример
В Go невозможно реализовать классический вариант паттерна Фабричный метод, поскольу в языке отсутствуют возможности ООП, в том числе классы и наследственность. Несмотря на это, мы все же можем реализовать базовую версию этого паттерна — Простая фабрика.
В этом примере мы будем создавать разные типы оружия при помощи структуры фабрики.
Сперва, мы создадим интерфейс iGun
, который определяет все методы будущих пушек. Также имеем структуру gun
(пушка), которая применяет интерфейс iGun
. Две конкретных пушки — ak47
и musket
— обе включают в себя структуру gun и не напрямую реализуют все методы от iGun.
gunFactory
служит фабрикой, которая создает пушку нужного типа в зависимости от аргумента на входе. Клиентом служит main.go . Вместо прямого взаимодействия с объектами ak47
или musket
, он создает экземпляры различного оружия при помощи gunFactory
, используя для контроля изготовления только параметры в виде строк.