![Паттерны проектирования на Go](/images/patterns/languages/go.png?id=70faef6e92828d6bc0c486bc59081e22)
![Паттерны проектирования на Go](/images/patterns/languages/mini/go.png?id=4ae96539199ae1c0b15d49fccc7d84cc)
ПАТТЕРНЫ ПРОЕКТИРОВАНИЯ на Go
Каталог Go-примеров
Порождающие паттерны
![Абстрактная фабрика](/images/patterns/cards/abstract-factory-mini.png?id=4c3927c446313a38ce77dfee38111e27)
Абстрактная фабрика
Позволяет создавать семейства связанных объектов, не привязываясь к конкретным классам создаваемых объектов.
![Строитель](/images/patterns/cards/builder-mini.png?id=19b95fd05e6469679752c0554b116815)
Строитель
Позволяет создавать сложные объекты пошагово. Строитель даёт возможность использовать один и тот же код строительства для получения разных представлений объектов.
![Фабричный метод](/images/patterns/cards/factory-method-mini.png?id=72619e9527893374b98a5913779ac167)
Фабричный метод
Определяет общий интерфейс для создания объектов в суперклассе, позволяя подклассам изменять тип создаваемых объектов.
![Прототип](/images/patterns/cards/prototype-mini.png?id=bc3046bb39ff36574c08d49839fd1c8e)
Прототип
Позволяет копировать объекты, не вдаваясь в подробности их реализации.
![Одиночка](/images/patterns/cards/singleton-mini.png?id=914e1565dfdf15f240e766163bd303ec)
Одиночка
Гарантирует, что у класса есть только один экземпляр, и предоставляет к нему глобальную точку доступа.
Структурные паттерны
![Адаптер](/images/patterns/cards/adapter-mini.png?id=b2ee4f681fb589be5a0685b94692aebb)
Адаптер
Позволяет объектам с несовместимыми интерфейсами работать вместе.
![Мост](/images/patterns/cards/bridge-mini.png?id=b389101d8ee8e23ffa1b534c704d0774)
Мост
Разделяет один или несколько классов на две отдельные иерархии — абстракцию и реализацию, позволяя изменять их независимо друг от друга.
![Компоновщик](/images/patterns/cards/composite-mini.png?id=a369d98d18b417f255d04568fd0131b8)
Компоновщик
Позволяет сгруппировать объекты в древовидную структуру, а затем работать с ними так, как будто это единичный объект.
![Декоратор](/images/patterns/cards/decorator-mini.png?id=d30458908e315af195cb183bc52dbef9)
Декоратор
Позволяет динамически добавлять объектам новую функциональность, оборачивая их в полезные «обёртки».
![Фасад](/images/patterns/cards/facade-mini.png?id=71ad6fa98b168c11cb3a1a9517dedf78)
Фасад
Предоставляет простой интерфейс к сложной системе классов, библиотеке или фреймворку.
![Легковес](/images/patterns/cards/flyweight-mini.png?id=422ca8d2f90614dce810a8812c626698)
Легковес
Позволяет вместить бóльшее количество объектов в отведённую оперативную память. Легковес экономит память, разделяя общее состояние объектов между собой, вместо хранения одинаковых данных в каждом объекте.
![Заместитель](/images/patterns/cards/proxy-mini.png?id=25890b11e7dc5af29625ccd0678b63a8)
Заместитель
Позволяет подставлять вместо реальных объектов специальные объекты-заменители. Эти объекты перехватывают вызовы к оригинальному объекту, позволяя сделать что-то до или после передачи вызова оригиналу.
Поведенческие паттерны
![Цепочка обязанностей](/images/patterns/cards/chain-of-responsibility-mini.png?id=36d85eba8d14986f053123de17aac7a7)
Цепочка обязанностей
Позволяет передавать запросы последовательно по цепочке обработчиков. Каждый последующий обработчик решает, может ли он обработать запрос сам и стоит ли передавать запрос дальше по цепи.
![Команда](/images/patterns/cards/command-mini.png?id=b149eda017c0583c1e92343b83cfb1eb)
Команда
Превращает запросы в объекты, позволяя передавать их как аргументы при вызове методов, ставить запросы в очередь, логировать их, а также поддерживать отмену операций.
![Итератор](/images/patterns/cards/iterator-mini.png?id=76c28bb48f997b36965983dd2b41f02e)
Итератор
Даёт возможность последовательно обходить элементы составных объектов, не раскрывая их внутреннего представления.
![Посредник](/images/patterns/cards/mediator-mini.png?id=a7e43ee8e17e4474737b1fcb3201d7ba)
Посредник
Позволяет уменьшить связанность множества классов между собой, благодаря перемещению этих связей в один класс-посредник.
![Снимок](/images/patterns/cards/memento-mini.png?id=8b2ea4dc2c5d15775a654808cc9de099)
Снимок
Позволяет делать снимки состояния объектов, не раскрывая подробностей их реализации. Затем снимки можно использовать, чтобы восстановить прошлое состояние объектов.
![Наблюдатель](/images/patterns/cards/observer-mini.png?id=fd2081ab1cff29c60b499bcf6a62786a)
Наблюдатель
Создаёт механизм подписки, позволяющий одним объектам следить и реагировать на события, происходящие в других объектах.
![Состояние](/images/patterns/cards/state-mini.png?id=f4018837e0641d1dade756b6678fd4ee)
Состояние
Позволяет объектам менять поведение в зависимости от своего состояния. Извне создаётся впечатление, что изменился класс объекта.
![Стратегия](/images/patterns/cards/strategy-mini.png?id=d38abee4fb6f2aed909d262bdadca936)
Стратегия
Определяет семейство схожих алгоритмов и помещает каждый из них в собственный класс, после чего алгоритмы можно взаимозаменять прямо во время исполнения программы.
![Шаблонный метод](/images/patterns/cards/template-method-mini.png?id=9f200248d88026d8e79d0f3dae411ab4)
Шаблонный метод
Определяет скелет алгоритма, перекладывая ответственность за некоторые его шаги на подклассы. Паттерн позволяет подклассам переопределять шаги алгоритма, не меняя его общей структуры.
![Посетитель](/images/patterns/cards/visitor-mini.png?id=854a35a62963bec1d75eab996918989b)
Посетитель
Позволяет создавать новые операции, не меняя классы объектов, над которыми эти операции могут выполняться.