Field note
Какие паттерны проектирования знаешь ?
Какие паттерны проектирования знаешь ? Спросят с вероятностью 47%
Паттерны проектирования — это проверенные решения типичных проблем, возникающих при разработке программного обеспечения. Они помогают сделать код более модульным, гибким и поддерживаемым. Они делятся на три основные категории в зависимости от их предназначения:
Порождающие (Creational) Связаны с процессом создания объектов, делая систему более независимой от способа создания, композиции и представления объектов. ✅Абстрактная фабрика (Abstract Factory): предоставляет интерфейс для создания семейств взаимосвязанных или зависимых объектов без указания их конкретных классов. ✅Строитель (Builder): отделяет конструирование сложного объекта от его представления, так что один и тот же процесс конструирования может создавать разные представления. ✅Фабричный метод (Factory Method): определяет интерфейс для создания объекта, но оставляет подклассам решение о том, какой класс инстанцировать. Фабричный метод позволяет классу делегировать инстанцирование подклассам. ✅Прототип (Prototype): создаёт объекты путём копирования существующего объекта, а не создания нового через конструктор. ✅Одиночка (Singleton): гарантирует, что класс имеет только один экземпляр, и предоставляет к нему глобальную точку доступа.
Структурные (Structural) Описывают, как объединить объекты и классы в более крупные структуры, сохраняя при этом гибкость и эффективность структур. ✅Адаптер (Adapter): позволяет объектам с несовместимыми интерфейсами работать вместе. ✅Мост (Bridge): разделяет абстракцию и реализацию так, чтобы они могли изменяться независимо. ✅Компоновщик (Composite): позволяет группировать объекты в древовидные структуры для представления иерархий часть-целое. ✅Декоратор (Decorator): динамически добавляет объектам новые обязанности без изменения их интерфейса. ✅Фасад (Facade): предоставляет упрощённый интерфейс к сложной системе классов, библиотеке или фреймворку. ✅Легковес (Flyweight): используется для уменьшения затрат на создание большого количества мелких похожих объектов. ✅Заместитель (Proxy): предоставляет заменитель или местозаполнитель для другого объекта для контроля доступа к нему.
Поведенческие (Behavioral) В основном описывают не столько шаблоны объектов или классов, сколько шаблоны взаимодействия между ними. ✅Цепочка обязанностей (Chain of Responsibility): передаёт запросы последовательно по цепочке обработчиков, пока один из них не обработает запрос. ✅Команда (Command): превращает запросы в объекты, позволяя передавать их как аргументы при вызове методов, ставить запросы в очередь, логировать их, а также поддерживать отмену операций. ✅Интерпретатор (Interpreter): задаёт грамматику для языка и интерпретатор для его грамматики. ✅Итератор (Iterator): предоставляет способ последовательного доступа ко всем элементам агрегата без раскрытия его внутреннего представления. ✅Посредник (Mediator): уменьшает сложность взаимодействия между объектами, введя между ними посредника. ✅Хранитель (Memento): позволяет сохранять и восстанавливать предыдущее состояние объекта без раскрытия деталей его реализации. ✅Наблюдатель (Observer): создаёт механизм подписки, позволяющий одним объектам следить и реагировать на события, происходящие в других объектах. ✅Состояние (State): позволяет объекту изменять своё поведение в зависимости от своего состояния. ✅Стратегия (Strategy): определяет семейство алгоритмов, инкапсулирует каждый из них и обеспечивает их взаимозаменяемость. ✅Шаблонный метод (Template Method): определяет скелет алгоритма в методе, перекладывая ответственность за некоторые его шаги на подклассы. ✅Посетитель (Visitor): позволяет добавлять в программу новые операции, не изменяя классы объектов, над которыми эти операции могут выполняться.
Каждый паттерн проектирования решает определённую проблему и может быть применим в различных ситуациях в зависимости от особенностей проекта и требований к нему.