🧠 Поведенческие паттерны: Стратегия, Наблюдатель, Цепочка
Эти паттерны помогают избежать спагетти-кода, где один класс управляет всем миром через гигантские
🗺 1. Strategy (Стратегия)
Суть: Позволяет менять алгоритм поведения объекта прямо "на лету", во время выполнения программы.
Это убийца бесконечных
Аналогия: Навигатор. Вы строите маршрут из точки А в точку Б. Стратегия - это способ передвижения:
🔴 Пешком (один алгоритм).
🔴 На машине (другой алгоритм).
🔴 На автобусе (третий алгоритм).
Цель одна, пути реализации разные.
Код:
👀 2. Observer (Наблюдатель / Listener)
Суть: Один объект (Subject) меняет свое состояние, и все зависимые от него объекты (Observers) тут же узнают об этом.
Аналогия: YouTube-канал.
🔴 Блогер (Subject) выпускает видео.
🔴 Подписчики (Observers) получают уведомление.
🔴 Если вы отписались - уведомления приходить перестанут.
Код: Это основа всех UI-фреймворков (кнопка нажата -> слушатель сработал) и даже архитектуры Kafka.
🔗 3. Chain of Responsibility (Цепочка обязанностей)
Суть: Запрос передается по цепочке обработчиков. Каждый обработчик решает: обработать запрос самому или передать следующему.
Аналогия: Техподдержка.
1. Сначала отвечает Чат-бот (Уровень 1). Не справился? -> Передает дальше.
2. Оператор колл-центра (Уровень 2). Не справился? -> Передает дальше.
3. Инженер (Уровень 3). Решает проблему.
Пример в Spring:
Spring Security работает именно так! Ваш HTTP-запрос проходит через цепочку фильтров:
🔴
Если хоть один фильтр скажет "Нет", запрос дальше не пойдет.
Код:
🔥 Итог
🔴 Strategy - Выбираем алгоритм действия (Платим картой или кэшем?).
🔴 Observer - Слушаем изменения (Вышло видео -> пришло уведомление).
🔴 Chain of Responsibility - Передаем эстафету (Фильтр 1 -> Фильтр 2 -> Контроллер).
#DesignPatterns #Behavioral #Strategy #Observer #ChainOfResponsibility
📲 Мы в MAX
👉@BookJava
Эти паттерны помогают избежать спагетти-кода, где один класс управляет всем миром через гигантские
if-else.🗺 1. Strategy (Стратегия)
Суть: Позволяет менять алгоритм поведения объекта прямо "на лету", во время выполнения программы.
Это убийца бесконечных
if (type == "CARD") { ... } else if (type == "PAYPAL") { ... }.Аналогия: Навигатор. Вы строите маршрут из точки А в точку Б. Стратегия - это способ передвижения:
Цель одна, пути реализации разные.
Код:
// Общий интерфейс
interface RouteStrategy {
void buildRoute(String a, String b);
}
// Конкретные стратегии
class RoadStrategy implements RouteStrategy { ... }
class WalkingStrategy implements RouteStrategy { ... }
// Контекст (Навигатор)
class Navigator {
private RouteStrategy strategy;
public void setStrategy(RouteStrategy strategy) {
this.strategy = strategy; // Меняем на лету!
}
public void buildRoute(String a, String b) {
strategy.buildRoute(a, b);
}
}
👀 2. Observer (Наблюдатель / Listener)
Суть: Один объект (Subject) меняет свое состояние, и все зависимые от него объекты (Observers) тут же узнают об этом.
Аналогия: YouTube-канал.
Код: Это основа всех UI-фреймворков (кнопка нажата -> слушатель сработал) и даже архитектуры Kafka.
class NewsAgency {
private List<Channel> channels = new ArrayList<>();
public void subscribe(Channel channel) {
channels.add(channel);
}
public void broadcast(String news) {
for (Channel channel : channels) {
channel.update(news); // Уведомляем всех!
}
}
}
🔗 3. Chain of Responsibility (Цепочка обязанностей)
Суть: Запрос передается по цепочке обработчиков. Каждый обработчик решает: обработать запрос самому или передать следующему.
Аналогия: Техподдержка.
1. Сначала отвечает Чат-бот (Уровень 1). Не справился? -> Передает дальше.
2. Оператор колл-центра (Уровень 2). Не справился? -> Передает дальше.
3. Инженер (Уровень 3). Решает проблему.
Пример в Spring:
Spring Security работает именно так! Ваш HTTP-запрос проходит через цепочку фильтров:
CorsFilter (проверяет домен) -> JwtFilter (проверяет токен) -> UsernamePasswordFilter (проверяет логин).Если хоть один фильтр скажет "Нет", запрос дальше не пойдет.
Код:
abstract class SupportHandler {
protected SupportHandler next;
public void setNext(SupportHandler next) { this.next = next; }
public void handleRequest(String issue) {
if (canHandle(issue)) {
solve();
} else if (next != null) {
next.handleRequest(issue); // Передаем следующему
}
}
}
🔥 Итог
#DesignPatterns #Behavioral #Strategy #Observer #ChainOfResponsibility
📲 Мы в MAX
👉@BookJava
Please open Telegram to view this post
VIEW IN TELEGRAM
👍6