Это творческий шаблон проектирования, а также один из наиболее часто используемых шаблонов.
Этот шаблон предоставляет способ создания экземпляров с использованием «фабричного» типа структуры и метод, который помогает создавать экземпляры в соответствии с предоставленными значениями и берет за основу структуру с общими атрибутами.
Пример:
Предположим, что мы разрабатываем программное обеспечение «Фабрика роботов», тогда нам нужно построить два типа роботов, робота-учителя и робота-истребителя.
Мы могли бы определить два подхода для этой обучающей статьи: первый — это фабричная функция, а второй — абстрактная фабрика. В следующем разделе будет описан каждый из них.
Реализуйте фабричный метод.
"Фабрика, определяемая функцией, которая помогает нам создавать экземпляры определенной структуры с определенными значениями или значениями, которые могут быть предоставлены в аргументах функции".
В приведенном выше коде мы видим фабричную функцию в строке 26, эта функция вернет экземпляр «Робота» с предоставленными значениями. Затем каждый раз, когда нам нужно создать экземпляр, мы можем вызывать функцию вместо создания непосредственно со структурой.
Вывод:
Как видите, два робота были созданы с использованием фабричной функции
Реализовать абстрактную фабрику
Абстрактная фабрика определяет функцию, которая помогает нам создавать несколько объектов одного семейства, это создание выполняется с помощью вызова конкретной фабричной функции, связанной с объектом, который мы хотим создать. каждый из объектов семейства определяется структурой, и эта структура состоит из базовой структуры, определяющей свойства семейства».
Я покажу вам пример, чтобы было понятнее:
В этом первом фрагменте кода мы видим структуру, которая определяет «семейный тип», в данном случае робота (строка 18), эта структура будет использоваться каждым из «объектов». типы», которые мы хотим создать.
На изображении ниже мы видим другую важную часть абстрактной фабрики, а именно типы, которые будут созданы, и их фабричные функции, каждая из которых имеет свои определенные значения.
В следующем коде показана фабрика функций, которая, как мы видим, используется для создания роботов-учителей и бойцов в зависимости от значения, переданного в параметре
А вот заводское использование
Вывод
Дополнительная информация
Узнав, как этот шаблон можно реализовать с помощью Golang, и прежде чем закончить эту статью, позвольте мне дать вам дополнительную информацию, я упомяну пару плюсов и минусов и то, как этот шаблон может быть связан с другими шаблонами.
Связь с другими моделями
Большинство шаблонов проектирования начинаются с реализации метода Factory, который является одним из самых простых и наиболее персонализированных, а когда проект и код разрастаются, иногда развиваются до Abstract Factory, Prototype или Builder, которые являются более гибкими, но более сложными.
Прототип, например, требует инициализации объекта, который будет реализован в его логике, для этого мы можем реализовать фабричный метод.
Абстрактная фабрика может быть реализована вместо Facade Pattern, когда нам просто нужно скрыть создание объекта.
Фабричный метод может служить ступенькой к более широкому шаблонному методу.
Вы можете реализовать шаблон прототипа для определения методов абстрактной фабрики.
За и против
- Избегайте сильного якоря между создателем и конкретными продуктами.
- Принцип единой ответственности. Вы можете переместить код создания продукта в место в программе, чтобы упростить его обслуживание.
- Принцип открыто-закрыто. Вы можете включать в программу новые типы продуктов, не нарушая существующий клиентский код.
- Вы можете быть уверены, что продукты, которые вы получаете с завода, совместимы друг с другом.
- Может случиться так, что код усложнится, поскольку вам придется включать множество структур и композиций для реализации шаблона. Идеальной ситуацией было бы вставить шаблон в существующую иерархию структур-создателей.
Примечание:
Эта статья относится к серии Шаблоны проектирования в Голанге, которые вы можете найти здесь https://blog.devgenius.io/desing-patters-in-golang-1b03de4fb89.