Репозиторий содержит реализации паттернов проектирования на Python 3. Всего реализовано 23 классических паттерна.
Паттерны проектирования — модель решения общих (часто встречающихся) проблем дизайна. Она (модель) описывает проблемы и основные подходы к их решению.
Паттерны делают нашу работу:
- последовательной
- понятной
- надежной
Паттерны разбиты на категории по цели их использования.
Эти паттерны отвечают за удобное и безопасное создание новых объектов или даже целых семейств объектов:
- Фабричный метод (factory method) — Определяет общий интерфейс для создания объектов, позволяя подклассам изменять тип создаваемых объектов.
- Абстрактная фабрика (abstract factory) — Позволяет создавать семейства связанных объектов, не привязываясь к конкретике.
- Строитель (builder) — Позволяет создавать сложные объекты пошагово.
- Прототип (prototype) — Позволяет копировать объекты, не вдаваясь в подробности их реализации.
- Одиночка (singleton) — Гарантирует, что у класса есть только один экземпляр, и предоставляет к нему глобальную точку доступа.
Эти паттерны отвечают за построение удобных в поддержке иерархий классов:
- Адаптер (adapter) — Позволяет объектам с несовместимым интерфейсом работать вместе.
- Мост (bridge) — Разделяет один или несколько классов на две отдельные иерархии — абстракцию и реализацию.
- Компоновщик (composite) — Позволяет сгруппировать множество объектов в древовидную структуру и работать с ней.
- Декоратор (decorator) — Позволяет динамически добавлять объектам новую функциональность.
- Заместитель (proxy) — Позволяет подставлять вместо реальных объектов специальные объекты-заменители.
- Легковес (flyweight) — Экономит память, разделяя общее состояние объектов между собой.
- Фасад (facade) — Предоставляет простой интерфейс к сложной системе, классу или фреймворку.
Эти паттерны решают задачи эффективного и безопасного взаимодействия между объектами программы:
- Цепочка обязанностей (chain of responsibility) — Позволяет передавать запросы последовательно по цепочке обработчиков.
- Итератор (iterator) — Дает возможность последовательно обходить элементы составных объектов, не раскрывая внутреннего представления.
- Посредник (mediator) — Позволяет уменьшить связанность множества объектов между собой.
- Снимок (memento) — Позволяет сохранять текущее и восстанавливать прошлые состояния объектов.
- Наблюдатель (observer) — Позволяет одним объектам следить и реагировать на изменения других объектов.
- Состояние (state) — Позволяет объектам менять поведение в зависимости от своего состояния.
- Стратегия (strategy) — Определяет семейство схожих объектов и помещает каждый из них в собственный класс.
- Шаблонный метод (template method) — Позволяет подклассам переопределять шаги алгоритма, не меняя общей структуры.
- Посетитель (visitor) — Позволяет добавлять в программу новые операции,не изменяя классы объектов, над которыми эти операции могут выполняться.
- Команда (command) — Превращает запросы в объекты, которые заключают в себе само действие и его параметры.
- Интерпретатор (interpreter) — Определяет представление грамматики для заданного языка и интерпретатор предложений этого языка.