Раздел 2 · 16 вопросов

Паттерны проектирования

16 вопросов и ответов в разделе Паттерны проектирования.

Russian Паттерны проектирования Исходный Markdown
Версии по языкам: English Russian Ukrainian

Вопросы этого раздела

  1. Что такое паттерны проектирования?
  2. Какие категории паттернов существуют?
  3. Что такое Singleton?
  4. Как реализовать потокобезопасный Singleton?
  5. Что такое double-checked locking?
  6. Каковы проблемы с Singleton?
  7. В чём разница между Factory Method и Abstract Factory?
  8. Когда использовать Builder?
  9. Что такое Prototype pattern?
  10. Когда использовать Strategy?
  11. Как реализован Observer в Java?
  12. В чём преимущество Decorator перед наследованием?
  13. В чём разница между State и Strategy?
  14. Какие типы Proxy существуют?
  15. Что такое Iterator pattern?
  16. Какие антипаттерны вы знаете?

Навигатор по разделу

16 вопросов для подготовки к собеседованию на Middle Java Developer.


📋 Все вопросы

# Вопрос Уровень сложности
1 Что такое паттерны проектирования
2 Какие категории паттернов существуют
3 Что такое Singleton ⭐⭐
4 Как реализовать потокобезопасный Singleton ⭐⭐⭐
5 Что такое double-checked locking ⭐⭐⭐
6 Каковы проблемы с Singleton ⭐⭐
7 В чём разница между Factory Method и Abstract Factory ⭐⭐
8 Когда использовать Builder ⭐⭐
9 Что такое Prototype pattern ⭐⭐
10 Когда использовать Strategy ⭐⭐⭐
11 Как реализован Observer в Java ⭐⭐
12 В чём преимущество Decorator перед наследованием ⭐⭐
13 В чём разница между State и Strategy ⭐⭐⭐
14 Какие типы Proxy существуют ⭐⭐⭐
15 Что такое Iterator pattern ⭐⭐
16 Какие антипаттерны вы знаете ⭐⭐

🗺️ Карта зависимостей тем

                    ┌──────────────────────────────────────────┐
                    │   ОСНОВЫ (1-2)                           │
                    │   1. Что такое паттерны                  │
                    │   2. Категории паттернов                 │
                    └──────────────────┬───────────────────────┘
                                       │
            ┌──────────────────────────┼──────────────────────────┐
            ▼                          ▼                          ▼
    ┌───────────────┐        ┌───────────────┐        ┌────────────────────┐
    │ ПОРОЖДАЮЩИЕ    │        │ ПОВЕДЕНЧЕСКИЕ  │        │ СТРУКТУРНЫЕ        │
    │ (3-9)          │        │ (10-11, 13)    │        │ (12, 14-15)        │
    │ 3. Singleton   │        │ 10. Strategy   │        │ 12. Decorator      │
    │ 4. Thread-safe │        │ 11. Observer   │        │ 14. Proxy          │
    │    Singleton   │        │ 13. State vs   │        │ 15. Iterator       │
    │ 5. DCL         │        │     Strategy   │        │                    │
    │ 6. Проблемы    │        │                │        │                    │
    │    Singleton   │        │                │        │                    │
    │ 7. Factory     │        │                │        │                    │
    │ 8. Builder     │        │                │        │                    │
    │ 9. Prototype   │        │                │        │                    │
    └───────────────┘        └───────────────┘        └────────┬───────────┘
                                                              │
                                                              ▼
                                                    ┌────────────────────┐
                                                    │ АНТИПАТТЕРНЫ (16)  │
                                                    │ 16. Антипаттерны   │
                                                    └────────────────────┘

🎯 Рекомендуемый порядок изучения

🟢 Уровень Junior (недели 1-2)

Шаг Тема Файлы Цель
1 Что такое паттерны Q1, Q2 Зачем нужны, категории GoF
2 Singleton Q3 Один экземпляр, где используется
3 Factory и Builder Q7, Q8 Создание объектов
4 Decorator и Iterator Q12, Q15 Оборачивание, перебор

🟡 Уровень Middle (недели 3-4)

Шаг Тема Файлы Цель
1 Проблемы Singleton Q6 Тестируемость, DI, масштабирование
2 Strategy Q10 Когда использовать, JIT оптимизации
3 Observer Q11 java.util.Observer deprecated, Flow API
4 Proxy Q14 JDK vs CGLIB, self-invocation

🔴 Уровень Senior (недели 5-6)

Шаг Тема Файлы Цель
1 Thread-safe Singleton Q4, Q5 Bill Pugh, DCL, volatile, JMM
2 State vs Strategy Q13 State machine, transitions via Registry
3 Prototype Q9 clone() issues, copy constructors
4 Антипаттерны Q16 God Object, Cargo Cult, Spaghetti

🔗 Ключевые связи между темами

Тема: Singleton

Q3 (Singleton) → Q4 (Thread-safe) → Q5 (DCL) → Q6 (Проблемы)

Ключевые связи:

  • Q4 ↔ Q5: DCL — один из способов thread-safe Singleton
  • Q6 ↔ Q3: DI-контейнер (Spring) решает проблемы Singleton

Тема: Порождающие паттерны

Q7 (Factory) → Q8 (Builder) → Q9 (Prototype)

Ключевые связи:

  • Q7 ↔ Q8: Factory = несколько способов создать, Builder = пошаговое создание
  • Q8 ↔ Q9: Builder = конструирование, Prototype = копирование

Тема: Поведенческие паттерны

Q10 (Strategy) → Q11 (Observer) → Q13 (State vs Strategy)

Ключевые связи:

  • Q10 ↔ Q13: Strategy = алгоритм меняется извне, State = состояние меняется изнутри
  • Q11 ↔ Q13: Observer = оповещение подписчиков, State = делегирование поведения

Тема: Структурные паттерны

Q12 (Decorator) → Q14 (Proxy) → Q15 (Iterator)

Ключевые связи:

  • Q12 ↔ Q14: Decorator добавляет поведение, Proxy контролирует доступ
  • Q14 ↔ Q6: Proxy решает проблемы Singleton (self-invocation, testability)

🎓 Шпаргалка: что знать для каждого уровня

🟢 Junior

  • Паттерны — проверенные решения типичных задач
  • 3 категории: порождающие, структурные, поведенческие
  • Singleton = один экземпляр, Factory = создание объектов
  • Builder = пошаговое создание сложных объектов

🟡 Middle

  • Bill Pugh Singleton = static inner class, thread-safe без synchronized
  • DCL = double check + volatile, оптимизация synchronized
  • DI-контейнер (Spring) решает проблемы Singleton
  • Strategy = алгоритм через интерфейс, Observer = подписка на события
  • Decorator vs наследование: n декораторов вместо 2^n классов

🔴 Senior

  • JMM: volatile = happens-before гарантия, DCL без volatile = broken
  • Megamorphic call threshold = 5 в HotSpot, inline cache оптимизация
  • java.util.Observable deprecated (Java 9), использовать Flow API
  • JDK Proxy ≈ CGLIB performance (JDK 8u40+), Spring Boot default = CGLIB
  • clone() обходит конструктор, copy constructor надёжнее
  • State transitions через Registry/Factory, не через new State()

📝 Формат каждого файла

Каждый файл содержит:

  • 🟢 Junior Level — базовое понимание, простые аналогии, примеры
  • 🟡 Middle Level — внутренности, типичные ошибки, практические примеры
  • 🔴 Senior Level — deep dive, edge cases, production experience, monitoring
  • 🎯 Шпаргалка для интервью — ключевые тезисы, частые вопросы, красные флаги, связанные темы