📌 Какие есть паттерны проектирования? 💬 Спрашивают в 55% собеседованийПаттерны проектирования (Design Patterns) — это проверенные решения общих проблем проектирования программного обеспечения. Они описывают шаблоны, которые можно применять в различных контекстах для решения типичных задач. Паттерны проектирования можно классифицировать на три основные категории: порождающие, структурные и поведенческие. Рассмотрим каждый из них подробнее:
🤔 Порождающие паттерны (Creational Patterns)Эти паттерны касаются процесса создания объектов, помогая сделать этот процесс более гибким и эффективным.
1️⃣ Singleton (Одиночка): Обеспечивает создание только одного экземпляра класса и предоставляет глобальную точку доступа к этому экземпляру.
2️⃣ Factory Method (Фабричный метод): Определяет интерфейс для создания объекта, но позволяет подклассам изменять тип создаваемого объекта.
3️⃣ Abstract Factory (Абстрактная фабрика): Предоставляет интерфейс для создания семейств взаимосвязанных или взаимозависимых объектов без указания их конкретных классов.
4️⃣Builder (Строитель): Разделяет процесс построения сложного объекта от его представления, позволяя использовать один и тот же процесс создания для различных представлений.
5️⃣ Prototype (Прототип): Создает новые объекты копированием существующих объектов (прототипов).
🤔 Структурные паттерны (Structural Patterns)Эти паттерны описывают способы компоновки объектов и классов для формирования более крупных структур.
1️⃣Adapter (Адаптер): Позволяет объектам с несовместимыми интерфейсами работать вместе.
2️⃣Bridge (Мост): Разделяет абстракцию и реализацию так, чтобы они могли изменяться независимо.
3️⃣Composite (Компоновщик): Составляет объекты в древовидные структуры для представления иерархий часть-целое.
4️⃣Decorator (Декоратор): Динамически добавляет новые обязанности объекту, не изменяя его класс.
5️⃣ Facade (Фасад): Предоставляет простой интерфейс к сложной системе классов или к библиотеке классов.
6️⃣ Flyweight (Приспособленец): Позволяет использовать большое количество мелких объектов, экономя память путем совместного использования общего состояния.
7️⃣ Proxy (Заместитель): Предоставляет суррогат или заменитель другого объекта для контроля доступа к нему.
🤔 Поведенческие паттерны (Behavioral Patterns)Эти паттерны касаются алгоритмов и распределения обязанностей между объектами.
1️⃣ Chain of Responsibility (Цепочка обязанностей): Передает запрос по цепочке обработчиков, где каждый обработчик решает, обрабатывать ли запрос или передать его дальше.
2️⃣ Command (Команда): Инкапсулирует запрос как объект, позволяя параметризовать клиентов с различными запросами, ставить запросы в очередь или вести журнал запросов.
3️⃣Interpreter (Интерпретатор): Определяет грамматику для языка и интерпретирует предложения этого языка.
4️⃣ Iterator (Итератор): Предоставляет способ последовательного доступа ко всем элементам агрегированного объекта без раскрытия его внутреннего представления.
5️⃣ Mediator (Посредник): Обеспечивает объект, который инкапсулирует взаимодействие множества объектов, снижая зависимость между ними.
6️⃣ Memento (Снимок): Позволяет сохранять и восстанавливать прошлое состояние объекта без нарушения инкапсуляции.
7️⃣ Observer (Наблюдатель): Определяет зависимость один-ко-многим между объектами, так что при изменении состояния одного объекта все зависимые объекты оповещаются и обновляются автоматически.
8️⃣State (Состояние): Позволяет объекту изменять свое поведение при изменении его внутреннего состояния.
9️⃣ Strategy (Стратегия): Определяет семейство алгоритмов, инкапсулирует каждый из них и делает их взаимозаменяемыми.
1️⃣0️⃣ Template Method (Шаблонный метод): Определяет скелет алгоритма в методе, оставляя определенные шаги подклассам.
1️⃣1️⃣ Visitor (Посетитель): Разделяет алгоритм от структуры объекта, позволяя добавлять новые операции без изменения классов объектов, над которыми эти операции выполняются.