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