ПАТТЕРН ПРОЕКТИРОВАНИЯ «АБСТРАКТНАЯ ФАБРИКА» В ЯЗЫКЕ ПРОГРАММИРОВАНИЯ GO

ПАТТЕРН ПРОЕКТИРОВАНИЯ «АБСТРАКТНАЯ ФАБРИКА» В ЯЗЫКЕ ПРОГРАММИРОВАНИЯ GO

Авторы публикации

Рубрика

Информационные технологии

Просмотры

43

Журнал

Журнал «Научный лидер» выпуск # 49 (250), Декабрь ‘25

Поделиться

Данная статья рассматривает паттерн проектирования абстрактная фабрика в Go.

В программировании шаблоны (или паттерны) проектирования являются обобщёнными решениями для часто встречающихся проблем. Их использование способствует повышению уровня абстракции в проектах и облегчает поддержку и расширение кода [1].

Паттерн проектирования "Абстрактная фабрика" играет ключевую роль в разработке программного обеспечения, предоставляя интерфейс для создания семейств взаимосвязанных или взаимозависимых объектов без спецификации их конкретных классов. Это позволяет программе быть более гибкой в выборе объектов для создания во время выполнения. Данный паттерн относится к категории порождающих паттернов, так как он занимается созданием экземпляров объектов.

Цель Абстрактной фабрики заключается в обеспечении интерфейса для создания семейств связанных объектов, не привязываясь к конкретным классам создаваемых объектов. Это позволяет коду программы работать с разными семействами объектов, изменяя лишь конкретные фабрики, не изменяя код, который использует эти объекты. Такой подход облегчает добавление новых семейств объектов в программу и повышает ее модульность.

Рассмотрим пример использования паттерна "Абстрактная фабрика". Представим, что разрабатывается программа для создания графического интерфейса, которая должна работать как на Windows, так и на macOS. В таком случае можно определить абстрактную фабрику GUIFactory, которая будет иметь методы для создания элементов интерфейса, например, кнопок и чекбоксов.

Пример представлен нарисунке 1.

Рисунок 1. Пример создания паттерна

 

В данном примере GUIFactory является интерфейсом абстрактной фабрики, предоставляющим метод для создания объектов типа Button. MacOSFactory и WindowsFactory– конкретные фабрики, реализующие этот интерфейс и создающие объекты соответствующих структур. Функция ClientCode демонстрирует, как клиентский код может использовать фабрику для создания объектов без знания о конкретных типах этих объектов.

Особенности реализации в Go.

В Go паттерн "Абстрактная фабрика" реализуется с помощью интерфейсов и структур, что отличается от реализации в объектно-ориентированных языках с классами:

Интерфейсы вместо абстрактных классов – в Go интерфейсы определяют контракт, который должны выполнять конкретные типы. Любой тип, реализующий все методы интерфейса, автоматически удовлетворяет этому интерфейсу без явного объявления наследования.

Структуры вместо классов – конкретные реализации продуктов и фабрик представлены структурами.

Композиция над наследованием – Go следует принципу "композиция над наследованием". Вместо иерархии классов используется встраивание структур и реализация интерфейсов, что обеспечивает большую гибкость и простоту.

В контексте паттерна проектирования Абстрактная фабрика, использование интерфейсов в Go помогает определить шаблон для создания семейств взаимосвязанных или взаимозависимых объектов, при этом не специфицируя их конкретные типы. Это дает возможность изменять и расширять семейства продуктов без изменения кода, который использует эти продукты [2].

Паттерн "Абстрактная фабрика" предоставляет мощный инструмент для создания семейств взаимосвязанных или взаимозависимых объектов без конкретизации их типов. Это способствует созданию гибкого и модульного кода. В Go этот паттерн реализуется с помощью интерфейсов и структур, что соответствует идиомам языка и принципу "композиция над наследованием".

Список литературы

  1. Донован А., Kernighan B. Язык программирования Go [Текст] / А. Донован, Б. Керниган. – М.: Вильямс, 2016. – 480 с.
  2. Цукалос М. Go: идиомы и паттерны проектирования [Текст] / М. Цукалос. – СПб.: Питер, 2020. – 544 с.
Справка о публикации и препринт статьи
предоставляется сразу после оплаты
Прием материалов
c по
Осталось 3 дня до окончания
Размещение электронной версии
Загрузка материалов в elibrary
Публикация за 24 часа
Узнать подробнее
Акция
Cкидка 20% на размещение статьи, начиная со второй
Бонусная программа
Узнать подробнее