1. Внедрение зависимостей (Dependency Injection): Этот паттерн используется для инъекции зависимостей в объекты, чтобы избежать создания зависимостей внутри объекта и сделать его более гибким и тестируемым. 2. Фабричный метод (Factory Method): Паттерн Factory Method предоставляет интерфейс для создания объектов, но позволяет подклассам решать, какой класс создавать. Он делегирует создание объектов наследникам, сохраняя при этом общий интерфейс. 3. Одиночка (Singleton): Паттерн Singleton гарантирует, что у класса есть только один экземпляр, и предоставляет глобальную точку доступа к этому экземпляру. 4. Наблюдатель (Observer): Паттерн Observer определяет отношение "один-ко-многим" между объектами, так что при изменении состояния одного объекта все зависящие от него объекты автоматически уведомляются и обновляются. 5. Шаблонный метод (Template Method): Паттерн Template Method определяет основной алгоритм в суперклассе, оставляя некоторые шаги реализации подклассам. 6. Фасад (Facade): Паттерн Facade предоставляет простой интерфейс для взаимодействия с сложной системой, скрывая ее сложность и предоставляя удобный набор методов для выполнения задач. 7. Декоратор (Decorator): Паттерн Decorator позволяет добавлять новую функциональность объектам динамически, оборачивая их в декораторы, сохраняя при этом интерфейс их базового класса. 8. Стратегия (Strategy): Паттерн Strategy определяет семейство алгоритмов, инкапсулирует каждый из них и делает их взаимозаменяемыми. Позволяет изменять алгоритмы независимо от клиентов, которые их используют. 9. Адаптер (Adapter): Паттерн Adapter позволяет объектам с несовместимыми интерфейсами работать вместе, оборачивая один интерфейс в другой, чтобы адаптировать их друг к другу. 10. Прототип (Prototype): Паттерн Prototype позволяет создавать объекты путем клонирования существующих объектов-прототипов, что упрощает процесс создания объектов и инициализации. 11. Абстрактная фабрика (Abstract Factory): Паттерн Abstract Factory предоставляет интерфейс для создания семейств связанных объектов без указания их конкретных классов. 12. Заместитель (Proxy): Паттерн Proxy выступает в роли заместителя для другого объекта и контролирует доступ к нему, позволяя выполнять дополнительные операции до или после вызова реального объекта. 13. Итератор (Iterator): Паттерн Iterator обеспечивает последовательный доступ и обход элементов коллекции без раскрытия деталей ее внутренней структуры. 14. Цепочка обязанностей (Chain of Responsibility): Паттерн Chain of Responsibility создает цепочку объектов-обработчиков, где каждый объект решает, может ли он обработать запрос или передать его следующему объекту в цепочке. 15. Состояние (State): Паттерн State позволяет объекту изменять свое поведение в зависимости от своего внутреннего состояния, создавая различные классы состояний и переключаясь между ними. 16. Команда (Command): Паттерн Command инкапсулирует запрос в виде объекта, позволяя передавать его как аргумент, сохранять историю команд и отменять операции. 17. Посредник (Mediator): Паттерн Mediator определяет объект-посредник, который управляет взаимодействием между объектами, обеспечивая слабую связность и избегая прямых связей между ними. 18. Посетитель (Visitor): Паттерн Visitor позволяет добавлять новые операции к объектам без изменения их классов, разделяя операции на отдельные классы посетителей. 19. Строитель (Builder): Паттерн Builder позволяет создавать сложные объекты пошагово, разделяя процесс конструирования на отдельные шаги. 20. Хранитель (Memento): Паттерн Memento позволяет сохранять и восстанавливать внутреннее состояние объекта без нарушения инкапсуляции.