Skip to content

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

Паттерны проектирования — это решения типичных проблем в проектировании ПО. Это не готовый код, а общее описание подхода к решению проблемы.

📚 Структура раздела

Категории паттернов

🏗️ Порождающие паттерны (Creational)

Решают проблемы создания объектов.

  1. Singleton — один объект на всё приложение
  2. Factory Method — создание объектов через фабрику
  3. Abstract Factory — семейства взаимосвязанных объектов
  4. Builder — пошаговое создание сложных объектов
  5. Prototype — создание копий объектов

🔗 Структурные паттерны (Structural)

Решают проблемы композиции объектов.

  1. Adapter — адаптация несовместимых интерфейсов
  2. Bridge — отделение абстракции от реализации
  3. Composite — древовидные структуры
  4. Decorator — добавление функциональности без наследования
  5. Facade — единый интерфейс для подсистемы
  6. Flyweight — экономия памяти через переиспользование
  7. Proxy — подмена объекта плацебо

🎯 Поведенческие паттерны (Behavioral)

Решают проблемы коммуникации между объектами.

  1. Observer — оповещение о событиях
  2. Strategy — выбор алгоритма в runtime
  3. State — смена поведения в зависимости от состояния
  4. Template Method — скелет алгоритма в базовом классе
  5. Visitor — операции над элементами структуры
  6. Iterator — последовательный доступ к элементам
  7. Command — инкапсуляция запроса как объекта
  8. Mediator — централизованный контроль взаимодействия
  9. Memento — сохранение и восстановление состояния
  10. Chain of Responsibility — передача запроса по цепи

🎪 Архитектурные паттерны

Используются на уровне всего приложения.

  1. MVC — Model-View-Controller
  2. MVVM — Model-View-ViewModel
  3. MVP — Model-View-Presenter

🎯 Что такое паттерны?

Паттерны проектирования — это не алгоритмы, а подходы к организации кода.

✅ Преимущества использования паттернов:

  • Переиспользование — проверенные решения
  • Коммуникация — единый язык для разработчиков
  • Масштабируемость — построение сложных систем
  • Поддерживаемость — понятный код
  • Гибкость — легче добавлять функциональность

❌ Когда НЕ использовать:

  • Простые скрипты без сложной логики
  • Изучение основ программирования
  • Очень срочные дедлайны (по началу медленнее)

🚀 Быстрый старт

Паттерн Singleton в JavaScript

javascript
// Старый способ (с проблемами)
let instance = null;

function createDatabase() {
  if (instance === null) {
    instance = new Database();
  }
  return instance;
}

// Современный способ (с классом)
class Database {
  static #instance = null;

  static getInstance() {
    if (Database.#instance === null) {
      Database.#instance = new Database();
    }
    return Database.#instance;
  }

  connect() {
    console.log('Connected to database');
  }
}

// Использование
const db1 = Database.getInstance();
const db2 = Database.getInstance();

console.log(db1 === db2); // true - один и тот же объект!

🎓 Как читать раздел

Для начинающих:

  1. Начните с Singleton — самый простой паттерн
  2. Затем Factory Method
  3. Потом Observer и Strategy
  4. Постепенно изучайте остальные

Для опытных:

Можете прыгать по интересующим вас паттернам. Рекомендуем чередовать порождающие, структурные и поведенческие.


💡 Когда какой паттерн использовать?

Нужен контроль над созданием объектов?

Factory, Builder, Singleton

Нужна гибкость в выборе алгоритма?

Strategy, State, Template Method

Нужно оповещать об событиях?

Observer, Mediator

Нужна древовидная структура?

Composite, Visitor

Нужна оптимизация памяти?

Flyweight, Proxy


📊 Сравнительная таблица

ПаттернНазначениеСложностьКогда использовать
SingletonОдин объект глобальноЛогирование, конфиг, БД
FactoryСоздание объектов⭐⭐Много типов объектов
ObserverОповещение о событиях⭐⭐UI события, подписки
StrategyВыбор алгоритма⭐⭐Разные способы обработки
DecoratorДобавление функций⭐⭐⭐Модульное расширение
ProxyКонтроль доступа⭐⭐Lazy loading, логирование

🔗 Связи между паттернами

Creational (создание)
├── Singleton → используется с Factory
├── Factory → может использовать Builder
└── Builder → альтернатива Factory

Structural (структура)
├── Decorator ↔ Strategy (оба модифицируют поведение)
├── Proxy ↔ Decorator (похожи, но разные цели)
└── Adapter ↔ Bridge (оба связывают интерфейсы)

Behavioral (поведение)
├── Observer → хорошо с Mediator
├── State ↔ Strategy (выбирают из вариантов)
├── Command → может использовать Memento (отмена)
└── Chain of Responsibility → часто в обработчиках

📚 Дополнительные ресурсы

Книги

  • "Design Patterns: Elements of Reusable Object-Oriented Software" (Gang of Four)
  • "Head First Design Patterns"
  • "JavaScript Design Patterns" (Addy Osmani)

Сайты


🎯 Цели этого раздела

После прочтения вы:

  • ✅ Узнаете 20+ проверенных паттернов
  • ✅ Поймёте, когда их использовать
  • ✅ Напишете чистый и масштабируемый код
  • ✅ Сможете общаться с опытными разработчиками
  • ✅ Будете готовы к технических интервью

Начните с раздела "Singleton" для введения в паттерны!