TGViewer
Библиотека Java разработчика Библиотека Java разработчика @bookjava · 10.1K subscribers
Post #4222 1.25K
📌 Паттерны проектирования: Декоратор в Java

Привет, друзья! Сегодня я хочу разобрать с вами один из самых полезных и часто применяемых паттернов проектирования — Декоратор.

🚀 Когда его использовать?
Когда нужно динамически добавлять функциональность объекту без изменения его кода. Это альтернатива наследованию, но более гибкая и мощная.

🔍 Пример из жизни
Представьте, что у нас есть базовый интерфейс Notifier, который отправляет сообщения. По умолчанию он умеет слать только e-mail уведомления. Но нам нужно добавить поддержку SMS и пуш-уведомлений.

Вместо того чтобы создавать кучу подклассов, мы используем Декоратор:


// Базовый интерфейс
interface Notifier {
void send(String message);
}

// Основная реализация
class EmailNotifier implements Notifier {
@Override
public void send(String message) {
System.out.println("Отправка email: " + message);
}
}

// Базовый декоратор
class NotifierDecorator implements Notifier {
protected Notifier notifier;

public NotifierDecorator(Notifier notifier) {
this.notifier = notifier;
}

@Override
public void send(String message) {
notifier.send(message);
}
}

// Декоратор для SMS
class SMSNotifier extends NotifierDecorator {
public SMSNotifier(Notifier notifier) {
super(notifier);
}

@Override
public void send(String message) {
super.send(message);
System.out.println("Отправка SMS: " + message);
}
}

// Декоратор для Push-уведомлений
class PushNotifier extends NotifierDecorator {
public PushNotifier(Notifier notifier) {
super(notifier);
}

@Override
public void send(String message) {
super.send(message);
System.out.println("Отправка Push-уведомления: " + message);
}
}

// Использование
public class Main {
public static void main(String[] args) {
Notifier notifier = new EmailNotifier();
notifier = new SMSNotifier(notifier);
notifier = new PushNotifier(notifier);

notifier.send("Важное сообщение!");
}
}


🔥 Выход в консоль:

Отправка email: Важное сообщение!
Отправка SMS: Важное сообщение!
Отправка Push-уведомления: Важное сообщение!


✅ Преимущества:
✔️ Гибкость: можно комбинировать декораторы в любом порядке
✔️ Принцип открытости/закрытости (OCP) — код легко расширяется
✔️ Разделение обязанностей — каждая часть отвечает за свою функцию

📲 Мы в MAX

👉@BookJava
  • 👍 3
  • ❤ 1
More from @bookjava
  1. Sep 27, 2026🧠 Ленивая инициализация через Supplier — элегантная альтернатива double-checked locking К…
  2. Sep 23, 2026Что такое механизм try-with-resources? Механизм try-with-resources в Java — это конструкци…
  3. Sep 21, 2026📌 picocli — это современная библиотека для создания CLI-приложений на Java. Она упрощает…
  4. Sep 18, 2026Double-brace инициализация в Java — это идиома, которая используется для инициализации кол…
  5. Sep 16, 2026🧠@Value vs @ConfigurationProperties — не выбирай наобум Оба способа хороши для конфигурац…
  6. Sep 14, 2026🧠 Трюк с @EventListener в Spring — убираем лишний @TransactionalEventListener Когда тебе…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →